{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3e2IEEIAuwyI"
      },
      "source": [
        "对应`tf.kears` 版本的03，在训练过程中加入更多的控制\n",
        "\n",
        "1. 训练中保存/保存最好的模型\n",
        "2. 早停\n",
        "3. 训练过程可视化\n",
        "\n",
        "<font color=\"red\">注</font>: 使用 tensorboard 可视化需要安装 tensorflow (TensorBoard依赖于tensorflow库，可以任意安装tensorflow的gpu/cpu版本)\n",
        "\n",
        "```shell\n",
        "pip install tensorflow\n",
        "```"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T01:54:30.190669Z",
          "start_time": "2025-01-16T01:54:29.185636Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3D39b7qquwyK",
        "outputId": "bea570ed-cfc7-44d5-81b6-2af92447966d"
      },
      "source": [
        "import matplotlib as mpl\n",
        "import matplotlib.pyplot as plt\n",
        "%matplotlib inline\n",
        "import numpy as np\n",
        "import sklearn\n",
        "import pandas as pd\n",
        "import os\n",
        "import sys\n",
        "import time\n",
        "from tqdm.auto import tqdm\n",
        "import torch\n",
        "import torch.nn as nn\n",
        "import torch.nn.functional as F\n",
        "\n",
        "print(sys.version_info)\n",
        "for module in mpl, np, pd, sklearn, torch:\n",
        "    print(module.__name__, module.__version__)\n",
        "\n",
        "device = torch.device(\"cuda:0\") if torch.cuda.is_available() else torch.device(\"cpu\")\n",
        "print(device)  #设备是cuda:0，即GPU，如果没有GPU则是cpu\n"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "sys.version_info(major=3, minor=11, micro=11, releaselevel='final', serial=0)\n",
            "matplotlib 3.10.0\n",
            "numpy 1.26.4\n",
            "pandas 2.2.2\n",
            "sklearn 1.6.1\n",
            "torch 2.5.1+cu124\n",
            "cuda:0\n"
          ]
        }
      ],
      "execution_count": 1
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RSRgCh-ZuwyL"
      },
      "source": [
        "## 数据准备"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T06:19:12.813102Z",
          "start_time": "2025-01-16T06:19:10.285401Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "y5DXoAutuwyM",
        "outputId": "7b4fd98c-f823-4ce4-b417-570446be002b"
      },
      "source": [
        "from torchvision import datasets\n",
        "from torchvision.transforms import ToTensor\n",
        "\n",
        "# fashion_mnist图像分类数据集\n",
        "train_ds = datasets.FashionMNIST(\n",
        "    root=\"data\",\n",
        "    train=True,\n",
        "    download=True,\n",
        "    transform=ToTensor()\n",
        ")\n",
        "\n",
        "test_ds = datasets.FashionMNIST(\n",
        "    root=\"data\",\n",
        "    train=False,\n",
        "    download=True,\n",
        "    transform=ToTensor()\n",
        ")\n",
        "\n",
        "# torchvision 数据集里没有提供训练集和验证集的划分\n",
        "# 当然也可以用 torch.utils.data.Dataset 实现人为划分"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz to data/FashionMNIST/raw/train-images-idx3-ubyte.gz\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "100%|██████████| 26.4M/26.4M [00:02<00:00, 10.7MB/s]\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting data/FashionMNIST/raw/train-images-idx3-ubyte.gz to data/FashionMNIST/raw\n",
            "\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz to data/FashionMNIST/raw/train-labels-idx1-ubyte.gz\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "100%|██████████| 29.5k/29.5k [00:00<00:00, 157kB/s]\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting data/FashionMNIST/raw/train-labels-idx1-ubyte.gz to data/FashionMNIST/raw\n",
            "\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz to data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "100%|██████████| 4.42M/4.42M [00:01<00:00, 2.94MB/s]\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting data/FashionMNIST/raw/t10k-images-idx3-ubyte.gz to data/FashionMNIST/raw\n",
            "\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz\n",
            "Downloading http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz to data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "100%|██████████| 5.15k/5.15k [00:00<00:00, 23.0MB/s]"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Extracting data/FashionMNIST/raw/t10k-labels-idx1-ubyte.gz to data/FashionMNIST/raw\n",
            "\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "\n"
          ]
        }
      ],
      "execution_count": 2
    },
    {
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T06:19:14.624895Z",
          "start_time": "2025-01-16T06:19:14.621350Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 204
        },
        "id": "5UDpfOLyuwyM",
        "outputId": "4a397464-6a8d-4ded-da75-b1068d1ffb14"
      },
      "cell_type": "code",
      "source": [
        "type(train_ds)"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "torchvision.datasets.mnist.FashionMNIST"
            ],
            "text/html": [
              "<div style=\"max-width:800px; border: 1px solid var(--colab-border-color);\"><style>\n",
              "      pre.function-repr-contents {\n",
              "        overflow-x: auto;\n",
              "        padding: 8px 12px;\n",
              "        max-height: 500px;\n",
              "      }\n",
              "\n",
              "      pre.function-repr-contents.function-repr-contents-collapsed {\n",
              "        cursor: pointer;\n",
              "        max-height: 100px;\n",
              "      }\n",
              "    </style>\n",
              "    <pre style=\"white-space: initial; background:\n",
              "         var(--colab-secondary-surface-color); padding: 8px 12px;\n",
              "         border-bottom: 1px solid var(--colab-border-color);\"><b>torchvision.datasets.mnist.FashionMNIST</b><br/>def __init__(root: Union[str, Path], train: bool=True, transform: Optional[Callable]=None, target_transform: Optional[Callable]=None, download: bool=False) -&gt; None</pre><pre class=\"function-repr-contents function-repr-contents-collapsed\" style=\"\"><a class=\"filepath\" style=\"display:none\" href=\"#\">/usr/local/lib/python3.11/dist-packages/torchvision/datasets/mnist.py</a>`Fashion-MNIST &lt;https://github.com/zalandoresearch/fashion-mnist&gt;`_ Dataset.\n",
              "\n",
              "Args:\n",
              "    root (str or ``pathlib.Path``): Root directory of dataset where ``FashionMNIST/raw/train-images-idx3-ubyte``\n",
              "        and  ``FashionMNIST/raw/t10k-images-idx3-ubyte`` exist.\n",
              "    train (bool, optional): If True, creates dataset from ``train-images-idx3-ubyte``,\n",
              "        otherwise from ``t10k-images-idx3-ubyte``.\n",
              "    download (bool, optional): If True, downloads the dataset from the internet and\n",
              "        puts it in root directory. If dataset is already downloaded, it is not\n",
              "        downloaded again.\n",
              "    transform (callable, optional): A function/transform that  takes in a PIL image\n",
              "        and returns a transformed version. E.g, ``transforms.RandomCrop``\n",
              "    target_transform (callable, optional): A function/transform that takes in the\n",
              "        target and transforms it.</pre>\n",
              "      <script>\n",
              "      if (google.colab.kernel.accessAllowed && google.colab.files && google.colab.files.view) {\n",
              "        for (const element of document.querySelectorAll('.filepath')) {\n",
              "          element.style.display = 'block'\n",
              "          element.onclick = (event) => {\n",
              "            event.preventDefault();\n",
              "            event.stopPropagation();\n",
              "            google.colab.files.view(element.textContent, 203);\n",
              "          };\n",
              "        }\n",
              "      }\n",
              "      for (const element of document.querySelectorAll('.function-repr-contents')) {\n",
              "        element.onclick = (event) => {\n",
              "          event.preventDefault();\n",
              "          event.stopPropagation();\n",
              "          element.classList.toggle('function-repr-contents-collapsed');\n",
              "        };\n",
              "      }\n",
              "      </script>\n",
              "      </div>"
            ]
          },
          "metadata": {},
          "execution_count": 3
        }
      ],
      "execution_count": 3
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T01:54:47.525171Z",
          "start_time": "2025-01-16T01:54:47.521908Z"
        },
        "id": "TKbkOpVVuwyM"
      },
      "source": [
        "# 从数据集到dataloader\n",
        "train_loader = torch.utils.data.DataLoader(train_ds, batch_size=32, shuffle=True)\n",
        "val_loader = torch.utils.data.DataLoader(test_ds, batch_size=32, shuffle=False)"
      ],
      "outputs": [],
      "execution_count": 4
    },
    {
      "cell_type": "code",
      "source": [
        "# 查看数据\n",
        "for datas, labels in train_loader:\n",
        "    print(datas.shape)\n",
        "    print(labels.shape)\n",
        "    break\n",
        "#查看val_loader\n",
        "for datas, labels in val_loader:\n",
        "    print(datas.shape)\n",
        "    print(labels.shape)\n",
        "    break"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T01:54:52.479193Z",
          "start_time": "2025-01-16T01:54:52.470692Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "FT-L_3pYuwyM",
        "outputId": "e077a221-21ad-4035-f720-bba513cf6e1c"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "torch.Size([32, 1, 28, 28])\n",
            "torch.Size([32])\n",
            "torch.Size([32, 1, 28, 28])\n",
            "torch.Size([32])\n"
          ]
        }
      ],
      "execution_count": 5
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hrQIABXOuwyM"
      },
      "source": [
        "## 定义模型"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T01:54:56.989172Z",
          "start_time": "2025-01-16T01:54:56.984664Z"
        },
        "id": "tGeTa-SWuwyN"
      },
      "source": [
        "class NeuralNetwork(nn.Module):\n",
        "    def __init__(self):\n",
        "        super().__init__()\n",
        "        self.flatten = nn.Flatten()\n",
        "        self.linear_relu_stack = nn.Sequential(\n",
        "            nn.Linear(28 * 28, 300),  # in_features=784, out_features=300\n",
        "            nn.ReLU(),\n",
        "            nn.Linear(300, 100),\n",
        "            nn.ReLU(),\n",
        "            nn.Linear(100, 10),\n",
        "        )\n",
        "\n",
        "    def forward(self, x):\n",
        "        # x.shape [batch size, 1, 28, 28]\n",
        "        x = self.flatten(x)\n",
        "        # 展平后 x.shape [batch size, 28 * 28]\n",
        "        logits = self.linear_relu_stack(x)\n",
        "        # logits.shape [batch size, 10]\n",
        "        return logits\n",
        "\n",
        "model = NeuralNetwork()"
      ],
      "outputs": [],
      "execution_count": 6
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "EkfwQ-FHuwyN"
      },
      "source": [
        "## 训练\n",
        "\n",
        "pytorch的训练需要自行实现，包括\n",
        "1. 定义损失函数\n",
        "2. 定义优化器\n",
        "3. 定义训练步\n",
        "4. 训练"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T01:55:02.065468Z",
          "start_time": "2025-01-16T01:55:02.031893Z"
        },
        "id": "xjVNRfEquwyN"
      },
      "source": [
        "from sklearn.metrics import accuracy_score\n",
        "\n",
        "@torch.no_grad()\n",
        "def evaluating(model, dataloader, loss_fct):\n",
        "    loss_list = []\n",
        "    pred_list = []\n",
        "    label_list = []\n",
        "    for datas, labels in dataloader:\n",
        "        #datas.shape [batch size, 1, 28, 28]\n",
        "        #labels.shape [batch size]\n",
        "        datas = datas.to(device)\n",
        "        labels = labels.to(device)\n",
        "        # 前向计算\n",
        "        logits = model(datas)\n",
        "        loss = loss_fct(logits, labels)         # 验证集损失\n",
        "        loss_list.append(loss.item()) # tensor.item() 获取tensor的数值，loss是只有一个元素的tensor\n",
        "\n",
        "        preds = logits.argmax(axis=-1)    # 验证集预测, axis=-1 表示最后一个维度,因为logits.shape [batch size, 10]，所以axis=-1表示对最后一个维度求argmax，即对每个样本的10个类别的概率求argmax，得到最大概率的类别, preds.shape [batch size]\n",
        "        pred_list.extend(preds.cpu().numpy().tolist()) # tensor转numpy，再转list\n",
        "        label_list.extend(labels.cpu().numpy().tolist())\n",
        "\n",
        "    acc = accuracy_score(label_list, pred_list) # 验证集准确率\n",
        "    return np.mean(loss_list), acc # 返回验证集平均损失和准确率\n"
      ],
      "outputs": [],
      "execution_count": 7
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "DRnEoNNuuwyN"
      },
      "source": [
        "# TensorBoard 可视化\n",
        "\n",
        "pip install tensorboard\n",
        "训练过程中可以使用如下命令启动tensorboard服务。注意使用绝对路径，否则会报错\n",
        "\n",
        "```shell\n",
        " tensorboard  --logdir=\"D:\\BaiduSyncdisk\\pytorch\\chapter_2_torch\\runs\" --host 0.0.0.0 --port 8848\n",
        "```"
      ]
    },
    {
      "metadata": {
        "id": "YzyPZGEeuwyN"
      },
      "cell_type": "markdown",
      "source": [
        "在命令行where tensorboard才可以用"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T01:59:55.569696Z",
          "start_time": "2025-01-16T01:59:53.301177Z"
        },
        "id": "q0TMhmL-uwyN"
      },
      "source": [
        "from torch.utils.tensorboard import SummaryWriter\n",
        "\n",
        "\n",
        "class TensorBoardCallback:\n",
        "    def __init__(self, log_dir, flush_secs=10):\n",
        "        \"\"\"\n",
        "        Args:\n",
        "            log_dir (str): dir to write log.\n",
        "            flush_secs (int, optional): write to dsk each flush_secs seconds. Defaults to 10.\n",
        "        \"\"\"\n",
        "        self.writer = SummaryWriter(log_dir=log_dir, flush_secs=flush_secs) # 实例化SummaryWriter, log_dir是log存放路径，flush_secs是每隔多少秒写入磁盘\n",
        "\n",
        "    def draw_model(self, model, input_shape):#graphs\n",
        "        self.writer.add_graph(model, input_to_model=torch.randn(input_shape)) # 画模型图\n",
        "\n",
        "    def add_loss_scalars(self, step, loss, val_loss):\n",
        "        self.writer.add_scalars(\n",
        "            main_tag=\"training/loss\",\n",
        "            tag_scalar_dict={\"loss\": loss, \"val_loss\": val_loss},\n",
        "            global_step=step,\n",
        "            ) # 画loss曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
        "\n",
        "    def add_acc_scalars(self, step, acc, val_acc):\n",
        "        self.writer.add_scalars(\n",
        "            main_tag=\"training/accuracy\",\n",
        "            tag_scalar_dict={\"accuracy\": acc, \"val_accuracy\": val_acc},\n",
        "            global_step=step,\n",
        "        ) # 画acc曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
        "\n",
        "    def add_lr_scalars(self, step, learning_rate):\n",
        "        self.writer.add_scalars(\n",
        "            main_tag=\"training/learning_rate\",\n",
        "            tag_scalar_dict={\"learning_rate\": learning_rate},\n",
        "            global_step=step,\n",
        "        ) # 画lr曲线, main_tag是主tag，tag_scalar_dict是子tag，global_step是步数\n",
        "\n",
        "    def __call__(self, step, **kwargs):\n",
        "        # add loss,把loss，val_loss取掉，画loss曲线\n",
        "        loss = kwargs.pop(\"loss\", None)\n",
        "        val_loss = kwargs.pop(\"val_loss\", None)\n",
        "        if loss is not None and val_loss is not None:\n",
        "            self.add_loss_scalars(step, loss, val_loss) # 画loss曲线\n",
        "        # add acc\n",
        "        acc = kwargs.pop(\"acc\", None)\n",
        "        val_acc = kwargs.pop(\"val_acc\", None)\n",
        "        if acc is not None and val_acc is not None:\n",
        "            self.add_acc_scalars(step, acc, val_acc) # 画acc曲线\n",
        "        # add lr\n",
        "        learning_rate = kwargs.pop(\"lr\", None)\n",
        "        if learning_rate is not None:\n",
        "            self.add_lr_scalars(step, learning_rate) # 画lr曲线\n"
      ],
      "outputs": [],
      "execution_count": 8
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "HAdjyU2fuwyN"
      },
      "source": [
        "### Save Best\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T02:34:55.096705Z",
          "start_time": "2025-01-16T02:34:55.092600Z"
        },
        "id": "rqlmfCpMuwyO"
      },
      "source": [
        "class SaveCheckpointsCallback:\n",
        "    def __init__(self, save_dir, save_step=500, save_best_only=True):\n",
        "        \"\"\"\n",
        "        Save checkpoints each save_epoch epoch.\n",
        "        We save checkpoint by epoch in this implementation.\n",
        "        Usually, training scripts with pytorch evaluating model and save checkpoint by step.\n",
        "\n",
        "        Args:\n",
        "            save_dir (str): dir to save checkpoint\n",
        "            save_epoch (int, optional): the frequency to save checkpoint. Defaults to 1.\n",
        "            save_best_only (bool, optional): If True, only save the best model or save each model at every epoch.\n",
        "        \"\"\"\n",
        "        self.save_dir = save_dir # 保存路径\n",
        "        self.save_step = save_step # 保存步数\n",
        "        self.save_best_only = save_best_only # 是否只保存最好的模型\n",
        "        self.best_metrics = -1 # 最好的指标，指标不可能为负数，所以初始化为-1\n",
        "\n",
        "        # mkdir\n",
        "        if not os.path.exists(self.save_dir): # 如果不存在保存路径，则创建\n",
        "            os.mkdir(self.save_dir)\n",
        "\n",
        "    def __call__(self, step, state_dict, metric=None):\n",
        "        if step % self.save_step > 0: #每隔save_step步保存一次\n",
        "            return\n",
        "\n",
        "        if self.save_best_only:\n",
        "            assert metric is not None # 必须传入metric\n",
        "            if metric >= self.best_metrics:\n",
        "                # save checkpoints\n",
        "                torch.save(state_dict, os.path.join(self.save_dir, \"best.ckpt\")) # 保存最好的模型，覆盖之前的模型，不保存step，只保存state_dict，即模型参数，不保存优化器参数\n",
        "                # update best metrics\n",
        "                self.best_metrics = metric\n",
        "        else:\n",
        "            torch.save(state_dict, os.path.join(self.save_dir, f\"{step}.ckpt\")) # 保存每个step的模型，不覆盖之前的模型，保存step，保存state_dict，即模型参数，不保存优化器参数\n",
        "\n"
      ],
      "outputs": [],
      "execution_count": 9
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "nSIrxXcMuwyO"
      },
      "source": [
        "### Early Stop"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T02:42:45.143104Z",
          "start_time": "2025-01-16T02:42:45.139659Z"
        },
        "id": "ynX0Yta1uwyO"
      },
      "source": [
        "class EarlyStopCallback:\n",
        "    def __init__(self, patience=5, min_delta=0.01):\n",
        "        \"\"\"\n",
        "\n",
        "        Args:\n",
        "            patience (int, optional): Number of epochs with no improvement after which training will be stopped.. Defaults to 5.\n",
        "            min_delta (float, optional): Minimum change in the monitored quantity to qualify as an improvement, i.e. an absolute\n",
        "                change of less than min_delta, will count as no improvement. Defaults to 0.01.\n",
        "        \"\"\"\n",
        "        self.patience = patience # 多少个step没有提升就停止训练\n",
        "        self.min_delta = min_delta # 最小的提升幅度\n",
        "        self.best_metric = -1\n",
        "        self.counter = 0 # 计数器，记录多少个step没有提升\n",
        "\n",
        "    def __call__(self, metric):\n",
        "        if metric >= self.best_metric + self.min_delta:#用准确率\n",
        "            # update best metric\n",
        "            self.best_metric = metric\n",
        "            # reset counter\n",
        "            self.counter = 0\n",
        "        else:\n",
        "            self.counter += 1 # 计数器加1，下面的patience判断用到\n",
        "\n",
        "    @property #使用@property装饰器，使得 对象.early_stop可以调用，不需要()\n",
        "    def early_stop(self):\n",
        "        return self.counter >= self.patience\n"
      ],
      "outputs": [],
      "execution_count": 10
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "80000"
            ]
          },
          "metadata": {},
          "execution_count": 11
        }
      ],
      "source": [
        "500*32*5"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2024-07-18T02:43:54.503637Z",
          "start_time": "2024-07-18T02:43:54.488870100Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Uvlgp6xbuwyO",
        "outputId": "abba56a6-2ca9-41f4-cb01-bd7507417505"
      }
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T02:54:45.279503Z",
          "start_time": "2025-01-16T02:54:45.273848Z"
        },
        "id": "wOb8M_7kuwyO"
      },
      "source": [
        "# 训练\n",
        "def training(\n",
        "    model,\n",
        "    train_loader,\n",
        "    val_loader,\n",
        "    epoch,\n",
        "    loss_fct,\n",
        "    optimizer,\n",
        "    tensorboard_callback=None,\n",
        "    save_ckpt_callback=None,\n",
        "    early_stop_callback=None,\n",
        "    eval_step=500,\n",
        "    ):\n",
        "    record_dict = {\n",
        "        \"train\": [],\n",
        "        \"val\": []\n",
        "    }\n",
        "\n",
        "    global_step = 0\n",
        "    model.train()\n",
        "    with tqdm(total=epoch * len(train_loader)) as pbar:\n",
        "        for epoch_id in range(epoch):\n",
        "            # training\n",
        "            for datas, labels in train_loader:\n",
        "                datas = datas.to(device) # 数据放到device上\n",
        "                labels = labels.to(device) # 标签放到device上\n",
        "                # 梯度清空\n",
        "                optimizer.zero_grad()\n",
        "                # 模型前向计算\n",
        "                logits = model(datas)\n",
        "                # 计算损失\n",
        "                loss = loss_fct(logits, labels)\n",
        "                # 梯度回传，计算梯度，更新参数，这里是更新模型参数\n",
        "                loss.backward()\n",
        "                # 调整优化器，包括学习率的变动等\n",
        "                optimizer.step()\n",
        "                preds = logits.argmax(axis=-1)\n",
        "\n",
        "                acc = accuracy_score(labels.cpu().numpy(), preds.cpu().numpy())\n",
        "                loss = loss.cpu().item()\n",
        "                # record\n",
        "\n",
        "                record_dict[\"train\"].append({\n",
        "                    \"loss\": loss, \"acc\": acc, \"step\": global_step\n",
        "                })\n",
        "\n",
        "                # evaluating\n",
        "                if global_step % eval_step == 0:\n",
        "                    model.eval()  # 切换到验证集模式\n",
        "                    val_loss, val_acc = evaluating(model, val_loader, loss_fct)\n",
        "                    record_dict[\"val\"].append({\n",
        "                        \"loss\": val_loss, \"acc\": val_acc, \"step\": global_step\n",
        "                    })\n",
        "                    model.train() # 切换回训练集模式\n",
        "\n",
        "                    # 1. 使用 tensorboard 可视化\n",
        "                    if tensorboard_callback is not None:\n",
        "                        tensorboard_callback(\n",
        "                            global_step,\n",
        "                            loss=loss, val_loss=val_loss,\n",
        "                            acc=acc, val_acc=val_acc,\n",
        "                            lr=optimizer.param_groups[0][\"lr\"], # 取出当前学习率\n",
        "                            )\n",
        "\n",
        "                    # 2. 保存模型权重 save model checkpoint\n",
        "                    if save_ckpt_callback is not None:\n",
        "                        save_ckpt_callback(global_step, model.state_dict(), metric=val_acc) # 保存最好的模型，覆盖之前的模型，保存step，保存state_dict,通过metric判断是否保存最好的模型\n",
        "\n",
        "                    # 3. 早停 Early Stop\n",
        "                    if early_stop_callback is not None:\n",
        "                        early_stop_callback(val_acc) # 验证集准确率不再提升，则停止训练\n",
        "                        if early_stop_callback.early_stop:# 验证集准确率不再提升，则停止训练\n",
        "                            print(f\"Early stop at epoch {epoch_id} / global_step {global_step}\")\n",
        "                            return record_dict\n",
        "\n",
        "                # udate step\n",
        "                global_step += 1\n",
        "                pbar.update(1)\n",
        "                pbar.set_postfix({\"epoch\": epoch_id})\n",
        "\n",
        "    return record_dict"
      ],
      "outputs": [],
      "execution_count": 12
    },
    {
      "cell_type": "code",
      "source": [
        "epoch = 100\n",
        "\n",
        "model = NeuralNetwork()\n",
        "\n",
        "# 1. 定义损失函数 采用MSE损失\n",
        "loss_fct = nn.CrossEntropyLoss()\n",
        "# 2. 定义优化器 采用SGD\n",
        "# Optimizers specified in the torch.optim package\n",
        "optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9)\n",
        "\n",
        "# 1. tensorboard 可视化\n",
        "tensorboard_callback = TensorBoardCallback(\"runs\")\n",
        "tensorboard_callback.draw_model(model, [1, 28, 28])\n",
        "# 2. save best\n",
        "save_ckpt_callback = SaveCheckpointsCallback(\"checkpoints\", save_best_only=True)\n",
        "# 3. early stop\n",
        "early_stop_callback = EarlyStopCallback(patience=10)\n"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T02:59:05.291336Z",
          "start_time": "2025-01-16T02:59:05.265942Z"
        },
        "id": "jaOrmC1YuwyO"
      },
      "outputs": [],
      "execution_count": 13
    },
    {
      "cell_type": "code",
      "source": [
        "list(model.parameters())[1] #可学习的模型参数"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T02:59:13.485862Z",
          "start_time": "2025-01-16T02:59:13.481555Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "aPHRyiQEuwyP",
        "outputId": "eb3b0341-f89c-4644-e132-6405321c1c36"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Parameter containing:\n",
              "tensor([ 1.1663e-02,  3.1346e-03,  1.8112e-03,  9.6597e-03, -1.4256e-02,\n",
              "         1.0864e-02,  1.2368e-02, -2.6515e-02,  2.1278e-02,  6.2160e-04,\n",
              "         3.9772e-03,  2.2650e-02, -1.3890e-02, -3.0104e-02,  1.2192e-02,\n",
              "         4.4673e-03,  4.2165e-03,  2.6742e-02, -3.4489e-02, -2.7080e-03,\n",
              "         1.4629e-02,  9.0707e-04, -2.4654e-02, -2.2902e-02, -1.0368e-02,\n",
              "        -1.1375e-02, -3.0811e-02, -2.3958e-02, -5.6437e-03,  1.1298e-03,\n",
              "         2.4704e-02, -1.1813e-02,  1.2825e-03,  8.8070e-03,  1.5964e-02,\n",
              "        -3.0078e-02, -2.1744e-02, -2.6913e-02, -2.7419e-02,  6.0462e-03,\n",
              "         8.8599e-04,  1.3036e-02,  4.7636e-03,  2.4367e-02, -2.8951e-02,\n",
              "         2.4114e-02,  2.5335e-02, -4.7979e-03,  3.3751e-02,  1.5002e-02,\n",
              "        -1.2231e-02, -1.6593e-02,  2.8017e-02, -7.4180e-03, -1.3364e-02,\n",
              "        -1.4343e-02, -1.5554e-02,  2.9174e-02, -2.4764e-03, -1.3040e-02,\n",
              "        -2.4136e-02,  1.0499e-02,  1.3339e-02,  1.9302e-02, -4.6204e-03,\n",
              "        -5.4589e-03, -2.6320e-02, -2.6622e-02, -1.0551e-02,  9.6602e-03,\n",
              "        -9.8618e-03, -1.6925e-02, -4.9223e-03,  2.2645e-02, -2.7603e-02,\n",
              "        -2.7171e-02, -2.3355e-02, -4.0485e-03,  1.4422e-02,  7.9874e-03,\n",
              "        -1.1711e-02,  6.2361e-03, -2.4710e-02,  3.3702e-02,  7.9367e-04,\n",
              "         2.4199e-02,  3.3535e-02, -2.8983e-02, -1.6849e-02,  2.1268e-02,\n",
              "        -2.5382e-02, -1.3649e-02,  3.5009e-02,  2.9513e-02,  1.1098e-02,\n",
              "        -2.6837e-03, -1.4399e-02,  5.3649e-03, -2.0406e-02,  2.4227e-02,\n",
              "        -8.3319e-03, -2.6408e-02,  8.9458e-03,  9.5867e-03, -2.0352e-02,\n",
              "        -3.0702e-02, -1.2074e-02,  3.4603e-02, -7.4110e-03, -8.8888e-03,\n",
              "        -1.3119e-02,  2.8229e-02,  1.6316e-02, -1.9166e-02,  3.3194e-02,\n",
              "         1.1440e-02, -1.3161e-02,  6.8228e-03,  2.6229e-02,  1.3764e-03,\n",
              "        -3.4395e-02, -1.8999e-02, -2.9875e-02,  2.9382e-03, -3.2541e-02,\n",
              "         5.3452e-03, -1.7435e-02,  1.7826e-02,  1.9399e-02, -3.2028e-02,\n",
              "        -3.4037e-02, -1.9515e-02, -3.9396e-03,  3.0830e-02, -2.6071e-02,\n",
              "         1.7118e-03,  3.5497e-02, -1.8025e-02,  1.3650e-02, -3.7667e-03,\n",
              "         3.4985e-02,  1.5252e-02, -1.1348e-02,  2.4955e-02, -2.1900e-02,\n",
              "        -1.8876e-02, -3.5036e-02, -3.4083e-02,  2.0905e-02, -1.8523e-02,\n",
              "        -5.0539e-03,  1.4849e-02,  2.0322e-02,  8.7331e-03,  2.2858e-02,\n",
              "        -1.5124e-02,  2.2400e-02, -7.2689e-03,  1.2826e-02,  3.0515e-02,\n",
              "         3.0296e-02,  3.1080e-02, -1.3223e-02,  3.4337e-02,  2.0856e-02,\n",
              "         1.5934e-02,  3.3152e-02,  7.1673e-03, -1.1737e-02, -1.3809e-02,\n",
              "        -3.0440e-02,  9.6750e-03, -2.4444e-02, -6.2197e-03,  2.6304e-02,\n",
              "        -1.8901e-02, -2.0962e-02,  1.3780e-02, -3.5572e-02,  1.6576e-02,\n",
              "        -1.9225e-02,  8.4227e-03,  3.3577e-02,  1.2362e-02, -2.2876e-02,\n",
              "         1.8824e-02,  3.2574e-02, -8.4051e-03, -4.4447e-03,  2.5766e-02,\n",
              "         7.6464e-03,  1.0282e-02,  1.4837e-02, -3.0438e-02,  1.5012e-02,\n",
              "        -8.8335e-03,  8.8282e-03,  3.2092e-02, -2.8032e-02, -1.0468e-02,\n",
              "        -3.4092e-03,  1.1635e-02,  1.7379e-03,  1.9069e-02,  3.0252e-02,\n",
              "        -6.5883e-03, -1.3851e-02, -2.6262e-02, -2.9583e-02, -2.1975e-02,\n",
              "         2.1264e-02, -2.5622e-02, -6.2030e-03,  1.6470e-02,  9.6977e-03,\n",
              "         6.0446e-03, -1.8678e-02,  4.1295e-03, -1.3383e-02, -2.6984e-03,\n",
              "        -1.9054e-02,  2.0059e-02,  3.3056e-03, -1.4711e-02,  1.4241e-02,\n",
              "        -1.9871e-02, -2.0052e-02,  3.2466e-02, -4.7895e-03,  1.3708e-02,\n",
              "         1.4470e-02, -2.4673e-02,  1.6401e-02, -1.4516e-02,  3.1591e-02,\n",
              "         9.3046e-03,  2.9206e-02,  2.3762e-02,  3.2891e-03,  2.0362e-02,\n",
              "         9.1693e-04,  3.4215e-02,  2.7229e-02,  3.3398e-02, -7.9458e-03,\n",
              "        -1.5498e-02, -2.2920e-03, -1.6772e-02, -9.8992e-03, -1.9194e-02,\n",
              "        -1.9017e-02,  2.3337e-02,  1.8357e-02,  4.2326e-03,  1.9950e-02,\n",
              "        -2.2966e-02,  1.3215e-02, -1.5417e-02, -1.2199e-02,  7.9998e-05,\n",
              "         5.1340e-03,  1.0724e-02,  3.2095e-02, -7.6796e-04, -3.2476e-02,\n",
              "         2.2311e-02,  3.4929e-02,  2.8465e-02,  1.7273e-02,  1.7154e-03,\n",
              "        -1.7118e-02, -2.2918e-02,  1.3450e-03, -1.3728e-02, -7.6631e-03,\n",
              "        -1.4822e-02, -3.4621e-02,  6.9030e-04,  2.7164e-02,  1.1452e-02,\n",
              "         1.7449e-02,  3.4399e-02,  2.1218e-02, -4.7724e-03, -2.7795e-03,\n",
              "         2.6794e-02, -2.2384e-02, -1.5652e-02, -3.5350e-02,  1.6040e-02,\n",
              "        -4.7475e-03, -6.0589e-04,  4.7530e-03, -3.1444e-03,  8.9584e-03,\n",
              "        -2.5228e-02,  2.2087e-02, -2.2884e-03,  1.1978e-02,  8.8283e-03],\n",
              "       requires_grad=True)"
            ]
          },
          "metadata": {},
          "execution_count": 14
        }
      ],
      "execution_count": 14
    },
    {
      "cell_type": "code",
      "source": [
        "model.state_dict().keys() #模型参数名字"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T02:58:26.162989Z",
          "start_time": "2025-01-16T02:58:26.160534Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "tjcwqgjzuwyP",
        "outputId": "8bb35b19-8383-48a5-a1b0-e6fd74b52222"
      },
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "odict_keys(['linear_relu_stack.0.weight', 'linear_relu_stack.0.bias', 'linear_relu_stack.2.weight', 'linear_relu_stack.2.bias', 'linear_relu_stack.4.weight', 'linear_relu_stack.4.bias'])"
            ]
          },
          "metadata": {},
          "execution_count": 15
        }
      ],
      "execution_count": 15
    },
    {
      "cell_type": "code",
      "source": [
        "model = model.to(device) # 放到device上\n",
        "record = training(\n",
        "    model,\n",
        "    train_loader,\n",
        "    val_loader,\n",
        "    epoch,\n",
        "    loss_fct,\n",
        "    optimizer,\n",
        "    tensorboard_callback=tensorboard_callback,\n",
        "    save_ckpt_callback=save_ckpt_callback,\n",
        "    early_stop_callback=early_stop_callback,\n",
        "    eval_step=1000\n",
        "    )\n",
        "#没有进度条，是因为pycharm本身jupyter的问题"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T03:02:20.992968Z",
          "start_time": "2025-01-16T03:00:43.272387Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 66,
          "referenced_widgets": [
            "95ecd06930ae477ba122a3eb87565921",
            "54fe4237c0ef4770a7e5692a06563f25",
            "5d9fcf62b612471eac9c11f24122ae35",
            "11488c89172c4b918f48fd4f07c63098",
            "bf31bb19ab174f2e8db63260d8b3b7e4",
            "f9695da9476d48b6a58432fd638ea791",
            "c43dfbfb958043af8f69e3018d3bd577",
            "e80b45fc2c3d4ba48c05c1febe2f6f29",
            "95d8fe7cb19240be88aa8a27a5691fd6",
            "d75f329c3121432b8b7b77d26d47cc86",
            "13595f3798334166bf028eb8e599ba35"
          ]
        },
        "id": "-lUxfzdnuwyP",
        "outputId": "b1907500-a237-4289-fd03-75bc1db5ab74"
      },
      "outputs": [
        {
          "data": {
            "application/vnd.jupyter.widget-view+json": {
              "model_id": "95ecd06930ae477ba122a3eb87565921",
              "version_major": 2,
              "version_minor": 0
            },
            "text/plain": [
              "  0%|          | 0/187500 [00:00<?, ?it/s]"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Early stop at epoch 18 / global_step 35000\n"
          ]
        }
      ],
      "execution_count": 16
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "0 a\n",
            "1 b\n",
            "2 c\n"
          ]
        }
      ],
      "source": [
        "#帮我写个enumerate例子\n",
        "for i, item in enumerate([\"a\", \"b\", \"c\"]):\n",
        "    print(i, item)"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2024-04-23T07:26:19.957701200Z",
          "start_time": "2024-04-23T07:26:19.914720400Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Osb2xAifuwyP",
        "outputId": "79d2c7ed-57d9-48cf-c9e5-049543a2f3ff"
      }
    },
    {
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T03:05:46.162193Z",
          "start_time": "2025-01-16T03:05:46.139017Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Eb_ehEfruwyP",
        "outputId": "be5e8f45-c464-4f04-a6f9-07db9791a980"
      },
      "cell_type": "code",
      "source": [
        "record"
      ],
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'train': [{'loss': 2.3039209842681885, 'acc': 0.15625, 'step': 0},\n",
              "  {'loss': 2.301689863204956, 'acc': 0.125, 'step': 1},\n",
              "  {'loss': 2.2978150844573975, 'acc': 0.25, 'step': 2},\n",
              "  {'loss': 2.3047688007354736, 'acc': 0.125, 'step': 3},\n",
              "  {'loss': 2.282024383544922, 'acc': 0.25, 'step': 4},\n",
              "  {'loss': 2.287599802017212, 'acc': 0.1875, 'step': 5},\n",
              "  {'loss': 2.2951059341430664, 'acc': 0.25, 'step': 6},\n",
              "  {'loss': 2.310626745223999, 'acc': 0.125, 'step': 7},\n",
              "  {'loss': 2.3314273357391357, 'acc': 0.0625, 'step': 8},\n",
              "  {'loss': 2.327242851257324, 'acc': 0.125, 'step': 9},\n",
              "  {'loss': 2.3152151107788086, 'acc': 0.0625, 'step': 10},\n",
              "  {'loss': 2.320051431655884, 'acc': 0.09375, 'step': 11},\n",
              "  {'loss': 2.301034927368164, 'acc': 0.1875, 'step': 12},\n",
              "  {'loss': 2.3042829036712646, 'acc': 0.34375, 'step': 13},\n",
              "  {'loss': 2.2960333824157715, 'acc': 0.15625, 'step': 14},\n",
              "  {'loss': 2.3155689239501953, 'acc': 0.03125, 'step': 15},\n",
              "  {'loss': 2.3114051818847656, 'acc': 0.09375, 'step': 16},\n",
              "  {'loss': 2.291243076324463, 'acc': 0.1875, 'step': 17},\n",
              "  {'loss': 2.2988250255584717, 'acc': 0.28125, 'step': 18},\n",
              "  {'loss': 2.2973709106445312, 'acc': 0.1875, 'step': 19},\n",
              "  {'loss': 2.2924649715423584, 'acc': 0.125, 'step': 20},\n",
              "  {'loss': 2.2734181880950928, 'acc': 0.3125, 'step': 21},\n",
              "  {'loss': 2.2998454570770264, 'acc': 0.25, 'step': 22},\n",
              "  {'loss': 2.299926996231079, 'acc': 0.1875, 'step': 23},\n",
              "  {'loss': 2.299910545349121, 'acc': 0.25, 'step': 24},\n",
              "  {'loss': 2.2816321849823, 'acc': 0.3125, 'step': 25},\n",
              "  {'loss': 2.274892568588257, 'acc': 0.25, 'step': 26},\n",
              "  {'loss': 2.292727470397949, 'acc': 0.28125, 'step': 27},\n",
              "  {'loss': 2.2884016036987305, 'acc': 0.28125, 'step': 28},\n",
              "  {'loss': 2.288989305496216, 'acc': 0.1875, 'step': 29},\n",
              "  {'loss': 2.2754833698272705, 'acc': 0.3125, 'step': 30},\n",
              "  {'loss': 2.3163747787475586, 'acc': 0.15625, 'step': 31},\n",
              "  {'loss': 2.2899513244628906, 'acc': 0.1875, 'step': 32},\n",
              "  {'loss': 2.2612290382385254, 'acc': 0.34375, 'step': 33},\n",
              "  {'loss': 2.2943661212921143, 'acc': 0.15625, 'step': 34},\n",
              "  {'loss': 2.2891523838043213, 'acc': 0.25, 'step': 35},\n",
              "  {'loss': 2.2722978591918945, 'acc': 0.375, 'step': 36},\n",
              "  {'loss': 2.269845485687256, 'acc': 0.28125, 'step': 37},\n",
              "  {'loss': 2.2727880477905273, 'acc': 0.21875, 'step': 38},\n",
              "  {'loss': 2.2717747688293457, 'acc': 0.375, 'step': 39},\n",
              "  {'loss': 2.2702860832214355, 'acc': 0.1875, 'step': 40},\n",
              "  {'loss': 2.2731921672821045, 'acc': 0.34375, 'step': 41},\n",
              "  {'loss': 2.278477907180786, 'acc': 0.25, 'step': 42},\n",
              "  {'loss': 2.2610530853271484, 'acc': 0.375, 'step': 43},\n",
              "  {'loss': 2.3082354068756104, 'acc': 0.125, 'step': 44},\n",
              "  {'loss': 2.283182144165039, 'acc': 0.28125, 'step': 45},\n",
              "  {'loss': 2.276965856552124, 'acc': 0.25, 'step': 46},\n",
              "  {'loss': 2.2833516597747803, 'acc': 0.3125, 'step': 47},\n",
              "  {'loss': 2.3010754585266113, 'acc': 0.1875, 'step': 48},\n",
              "  {'loss': 2.282501220703125, 'acc': 0.21875, 'step': 49},\n",
              "  {'loss': 2.274892568588257, 'acc': 0.21875, 'step': 50},\n",
              "  {'loss': 2.26751708984375, 'acc': 0.375, 'step': 51},\n",
              "  {'loss': 2.276395797729492, 'acc': 0.28125, 'step': 52},\n",
              "  {'loss': 2.2564430236816406, 'acc': 0.28125, 'step': 53},\n",
              "  {'loss': 2.2847437858581543, 'acc': 0.25, 'step': 54},\n",
              "  {'loss': 2.2569265365600586, 'acc': 0.28125, 'step': 55},\n",
              "  {'loss': 2.266244888305664, 'acc': 0.125, 'step': 56},\n",
              "  {'loss': 2.25765323638916, 'acc': 0.25, 'step': 57},\n",
              "  {'loss': 2.2524709701538086, 'acc': 0.34375, 'step': 58},\n",
              "  {'loss': 2.2733070850372314, 'acc': 0.25, 'step': 59},\n",
              "  {'loss': 2.256922721862793, 'acc': 0.21875, 'step': 60},\n",
              "  {'loss': 2.2605104446411133, 'acc': 0.1875, 'step': 61},\n",
              "  {'loss': 2.2642464637756348, 'acc': 0.21875, 'step': 62},\n",
              "  {'loss': 2.24717116355896, 'acc': 0.21875, 'step': 63},\n",
              "  {'loss': 2.268667697906494, 'acc': 0.15625, 'step': 64},\n",
              "  {'loss': 2.2570888996124268, 'acc': 0.21875, 'step': 65},\n",
              "  {'loss': 2.2474265098571777, 'acc': 0.28125, 'step': 66},\n",
              "  {'loss': 2.263979196548462, 'acc': 0.15625, 'step': 67},\n",
              "  {'loss': 2.2473926544189453, 'acc': 0.1875, 'step': 68},\n",
              "  {'loss': 2.272155523300171, 'acc': 0.25, 'step': 69},\n",
              "  {'loss': 2.2358219623565674, 'acc': 0.25, 'step': 70},\n",
              "  {'loss': 2.2830188274383545, 'acc': 0.125, 'step': 71},\n",
              "  {'loss': 2.252397298812866, 'acc': 0.25, 'step': 72},\n",
              "  {'loss': 2.247452735900879, 'acc': 0.28125, 'step': 73},\n",
              "  {'loss': 2.260798215866089, 'acc': 0.1875, 'step': 74},\n",
              "  {'loss': 2.2602038383483887, 'acc': 0.21875, 'step': 75},\n",
              "  {'loss': 2.264230251312256, 'acc': 0.15625, 'step': 76},\n",
              "  {'loss': 2.20974063873291, 'acc': 0.46875, 'step': 77},\n",
              "  {'loss': 2.2362444400787354, 'acc': 0.375, 'step': 78},\n",
              "  {'loss': 2.252166748046875, 'acc': 0.1875, 'step': 79},\n",
              "  {'loss': 2.240511178970337, 'acc': 0.3125, 'step': 80},\n",
              "  {'loss': 2.244842052459717, 'acc': 0.25, 'step': 81},\n",
              "  {'loss': 2.2276265621185303, 'acc': 0.40625, 'step': 82},\n",
              "  {'loss': 2.250112295150757, 'acc': 0.3125, 'step': 83},\n",
              "  {'loss': 2.2704453468322754, 'acc': 0.25, 'step': 84},\n",
              "  {'loss': 2.257833242416382, 'acc': 0.09375, 'step': 85},\n",
              "  {'loss': 2.229883909225464, 'acc': 0.34375, 'step': 86},\n",
              "  {'loss': 2.2421252727508545, 'acc': 0.28125, 'step': 87},\n",
              "  {'loss': 2.210712194442749, 'acc': 0.375, 'step': 88},\n",
              "  {'loss': 2.2395200729370117, 'acc': 0.28125, 'step': 89},\n",
              "  {'loss': 2.2427432537078857, 'acc': 0.21875, 'step': 90},\n",
              "  {'loss': 2.260108709335327, 'acc': 0.125, 'step': 91},\n",
              "  {'loss': 2.2377517223358154, 'acc': 0.21875, 'step': 92},\n",
              "  {'loss': 2.257388114929199, 'acc': 0.15625, 'step': 93},\n",
              "  {'loss': 2.2117083072662354, 'acc': 0.3125, 'step': 94},\n",
              "  {'loss': 2.224102020263672, 'acc': 0.3125, 'step': 95},\n",
              "  {'loss': 2.2101123332977295, 'acc': 0.3125, 'step': 96},\n",
              "  {'loss': 2.2375054359436035, 'acc': 0.15625, 'step': 97},\n",
              "  {'loss': 2.23203706741333, 'acc': 0.28125, 'step': 98},\n",
              "  {'loss': 2.2448368072509766, 'acc': 0.1875, 'step': 99},\n",
              "  {'loss': 2.2162156105041504, 'acc': 0.1875, 'step': 100},\n",
              "  {'loss': 2.198220729827881, 'acc': 0.40625, 'step': 101},\n",
              "  {'loss': 2.2176942825317383, 'acc': 0.3125, 'step': 102},\n",
              "  {'loss': 2.2247276306152344, 'acc': 0.21875, 'step': 103},\n",
              "  {'loss': 2.2416183948516846, 'acc': 0.3125, 'step': 104},\n",
              "  {'loss': 2.207904815673828, 'acc': 0.21875, 'step': 105},\n",
              "  {'loss': 2.235490560531616, 'acc': 0.21875, 'step': 106},\n",
              "  {'loss': 2.200549602508545, 'acc': 0.375, 'step': 107},\n",
              "  {'loss': 2.2079169750213623, 'acc': 0.3125, 'step': 108},\n",
              "  {'loss': 2.210479497909546, 'acc': 0.3125, 'step': 109},\n",
              "  {'loss': 2.223747730255127, 'acc': 0.25, 'step': 110},\n",
              "  {'loss': 2.2104480266571045, 'acc': 0.3125, 'step': 111},\n",
              "  {'loss': 2.2270185947418213, 'acc': 0.34375, 'step': 112},\n",
              "  {'loss': 2.237675428390503, 'acc': 0.28125, 'step': 113},\n",
              "  {'loss': 2.2238552570343018, 'acc': 0.21875, 'step': 114},\n",
              "  {'loss': 2.1972243785858154, 'acc': 0.25, 'step': 115},\n",
              "  {'loss': 2.2356598377227783, 'acc': 0.21875, 'step': 116},\n",
              "  {'loss': 2.2239975929260254, 'acc': 0.25, 'step': 117},\n",
              "  {'loss': 2.188309669494629, 'acc': 0.34375, 'step': 118},\n",
              "  {'loss': 2.22101092338562, 'acc': 0.28125, 'step': 119},\n",
              "  {'loss': 2.2186384201049805, 'acc': 0.1875, 'step': 120},\n",
              "  {'loss': 2.198641300201416, 'acc': 0.375, 'step': 121},\n",
              "  {'loss': 2.181476593017578, 'acc': 0.28125, 'step': 122},\n",
              "  {'loss': 2.1841745376586914, 'acc': 0.34375, 'step': 123},\n",
              "  {'loss': 2.210089921951294, 'acc': 0.21875, 'step': 124},\n",
              "  {'loss': 2.2051422595977783, 'acc': 0.28125, 'step': 125},\n",
              "  {'loss': 2.19473934173584, 'acc': 0.3125, 'step': 126},\n",
              "  {'loss': 2.1744346618652344, 'acc': 0.34375, 'step': 127},\n",
              "  {'loss': 2.168003797531128, 'acc': 0.375, 'step': 128},\n",
              "  {'loss': 2.185243606567383, 'acc': 0.25, 'step': 129},\n",
              "  {'loss': 2.185483932495117, 'acc': 0.40625, 'step': 130},\n",
              "  {'loss': 2.200232744216919, 'acc': 0.3125, 'step': 131},\n",
              "  {'loss': 2.2391750812530518, 'acc': 0.0625, 'step': 132},\n",
              "  {'loss': 2.1492199897766113, 'acc': 0.34375, 'step': 133},\n",
              "  {'loss': 2.1789844036102295, 'acc': 0.3125, 'step': 134},\n",
              "  {'loss': 2.1824910640716553, 'acc': 0.3125, 'step': 135},\n",
              "  {'loss': 2.1588308811187744, 'acc': 0.28125, 'step': 136},\n",
              "  {'loss': 2.2112879753112793, 'acc': 0.1875, 'step': 137},\n",
              "  {'loss': 2.182053327560425, 'acc': 0.25, 'step': 138},\n",
              "  {'loss': 2.182377338409424, 'acc': 0.375, 'step': 139},\n",
              "  {'loss': 2.2079250812530518, 'acc': 0.09375, 'step': 140},\n",
              "  {'loss': 2.1775341033935547, 'acc': 0.21875, 'step': 141},\n",
              "  {'loss': 2.2055962085723877, 'acc': 0.21875, 'step': 142},\n",
              "  {'loss': 2.174755096435547, 'acc': 0.34375, 'step': 143},\n",
              "  {'loss': 2.1492106914520264, 'acc': 0.40625, 'step': 144},\n",
              "  {'loss': 2.176131248474121, 'acc': 0.25, 'step': 145},\n",
              "  {'loss': 2.1811931133270264, 'acc': 0.25, 'step': 146},\n",
              "  {'loss': 2.171729326248169, 'acc': 0.3125, 'step': 147},\n",
              "  {'loss': 2.220278263092041, 'acc': 0.25, 'step': 148},\n",
              "  {'loss': 2.167633056640625, 'acc': 0.25, 'step': 149},\n",
              "  {'loss': 2.179218292236328, 'acc': 0.25, 'step': 150},\n",
              "  {'loss': 2.127639055252075, 'acc': 0.375, 'step': 151},\n",
              "  {'loss': 2.1763269901275635, 'acc': 0.21875, 'step': 152},\n",
              "  {'loss': 2.1611735820770264, 'acc': 0.21875, 'step': 153},\n",
              "  {'loss': 2.142303943634033, 'acc': 0.28125, 'step': 154},\n",
              "  {'loss': 2.190680503845215, 'acc': 0.25, 'step': 155},\n",
              "  {'loss': 2.1636452674865723, 'acc': 0.1875, 'step': 156},\n",
              "  {'loss': 2.210188865661621, 'acc': 0.15625, 'step': 157},\n",
              "  {'loss': 2.1823432445526123, 'acc': 0.25, 'step': 158},\n",
              "  {'loss': 2.178739309310913, 'acc': 0.21875, 'step': 159},\n",
              "  {'loss': 2.1431522369384766, 'acc': 0.21875, 'step': 160},\n",
              "  {'loss': 2.161691665649414, 'acc': 0.25, 'step': 161},\n",
              "  {'loss': 2.1651251316070557, 'acc': 0.15625, 'step': 162},\n",
              "  {'loss': 2.1570074558258057, 'acc': 0.21875, 'step': 163},\n",
              "  {'loss': 2.144273042678833, 'acc': 0.28125, 'step': 164},\n",
              "  {'loss': 2.127580165863037, 'acc': 0.21875, 'step': 165},\n",
              "  {'loss': 2.137864351272583, 'acc': 0.3125, 'step': 166},\n",
              "  {'loss': 2.1251301765441895, 'acc': 0.25, 'step': 167},\n",
              "  {'loss': 2.1019437313079834, 'acc': 0.34375, 'step': 168},\n",
              "  {'loss': 2.1699252128601074, 'acc': 0.25, 'step': 169},\n",
              "  {'loss': 2.11299991607666, 'acc': 0.34375, 'step': 170},\n",
              "  {'loss': 2.126399517059326, 'acc': 0.28125, 'step': 171},\n",
              "  {'loss': 2.137450933456421, 'acc': 0.25, 'step': 172},\n",
              "  {'loss': 2.1209635734558105, 'acc': 0.3125, 'step': 173},\n",
              "  {'loss': 2.165294647216797, 'acc': 0.375, 'step': 174},\n",
              "  {'loss': 2.106647253036499, 'acc': 0.34375, 'step': 175},\n",
              "  {'loss': 2.1080386638641357, 'acc': 0.40625, 'step': 176},\n",
              "  {'loss': 2.1122829914093018, 'acc': 0.3125, 'step': 177},\n",
              "  {'loss': 2.1535353660583496, 'acc': 0.15625, 'step': 178},\n",
              "  {'loss': 2.1304996013641357, 'acc': 0.28125, 'step': 179},\n",
              "  {'loss': 2.101158618927002, 'acc': 0.375, 'step': 180},\n",
              "  {'loss': 2.0731427669525146, 'acc': 0.28125, 'step': 181},\n",
              "  {'loss': 2.1172447204589844, 'acc': 0.25, 'step': 182},\n",
              "  {'loss': 2.098240613937378, 'acc': 0.3125, 'step': 183},\n",
              "  {'loss': 2.108383893966675, 'acc': 0.21875, 'step': 184},\n",
              "  {'loss': 2.1037018299102783, 'acc': 0.40625, 'step': 185},\n",
              "  {'loss': 2.1359291076660156, 'acc': 0.15625, 'step': 186},\n",
              "  {'loss': 2.1159939765930176, 'acc': 0.25, 'step': 187},\n",
              "  {'loss': 2.1453514099121094, 'acc': 0.25, 'step': 188},\n",
              "  {'loss': 2.1117842197418213, 'acc': 0.25, 'step': 189},\n",
              "  {'loss': 2.1268153190612793, 'acc': 0.25, 'step': 190},\n",
              "  {'loss': 2.0902485847473145, 'acc': 0.28125, 'step': 191},\n",
              "  {'loss': 2.127194404602051, 'acc': 0.21875, 'step': 192},\n",
              "  {'loss': 2.062114715576172, 'acc': 0.28125, 'step': 193},\n",
              "  {'loss': 2.0408904552459717, 'acc': 0.4375, 'step': 194},\n",
              "  {'loss': 2.0418388843536377, 'acc': 0.46875, 'step': 195},\n",
              "  {'loss': 2.100220203399658, 'acc': 0.21875, 'step': 196},\n",
              "  {'loss': 2.0744779109954834, 'acc': 0.25, 'step': 197},\n",
              "  {'loss': 2.1464126110076904, 'acc': 0.25, 'step': 198},\n",
              "  {'loss': 2.089292049407959, 'acc': 0.375, 'step': 199},\n",
              "  {'loss': 2.0488226413726807, 'acc': 0.34375, 'step': 200},\n",
              "  {'loss': 2.127216339111328, 'acc': 0.15625, 'step': 201},\n",
              "  {'loss': 2.081439971923828, 'acc': 0.3125, 'step': 202},\n",
              "  {'loss': 2.1012558937072754, 'acc': 0.3125, 'step': 203},\n",
              "  {'loss': 2.0808908939361572, 'acc': 0.3125, 'step': 204},\n",
              "  {'loss': 2.064397096633911, 'acc': 0.3125, 'step': 205},\n",
              "  {'loss': 2.1277332305908203, 'acc': 0.21875, 'step': 206},\n",
              "  {'loss': 2.0524511337280273, 'acc': 0.4375, 'step': 207},\n",
              "  {'loss': 2.1474342346191406, 'acc': 0.15625, 'step': 208},\n",
              "  {'loss': 2.051983118057251, 'acc': 0.3125, 'step': 209},\n",
              "  {'loss': 2.0846471786499023, 'acc': 0.28125, 'step': 210},\n",
              "  {'loss': 2.0571939945220947, 'acc': 0.3125, 'step': 211},\n",
              "  {'loss': 2.0711426734924316, 'acc': 0.3125, 'step': 212},\n",
              "  {'loss': 2.041804790496826, 'acc': 0.4375, 'step': 213},\n",
              "  {'loss': 2.1188929080963135, 'acc': 0.3125, 'step': 214},\n",
              "  {'loss': 2.0284717082977295, 'acc': 0.46875, 'step': 215},\n",
              "  {'loss': 1.9583255052566528, 'acc': 0.59375, 'step': 216},\n",
              "  {'loss': 2.00464129447937, 'acc': 0.375, 'step': 217},\n",
              "  {'loss': 2.0107266902923584, 'acc': 0.46875, 'step': 218},\n",
              "  {'loss': 1.9979228973388672, 'acc': 0.53125, 'step': 219},\n",
              "  {'loss': 2.0224483013153076, 'acc': 0.40625, 'step': 220},\n",
              "  {'loss': 2.063061237335205, 'acc': 0.375, 'step': 221},\n",
              "  {'loss': 2.010524272918701, 'acc': 0.5, 'step': 222},\n",
              "  {'loss': 2.0197439193725586, 'acc': 0.53125, 'step': 223},\n",
              "  {'loss': 2.054036855697632, 'acc': 0.3125, 'step': 224},\n",
              "  {'loss': 2.049351453781128, 'acc': 0.46875, 'step': 225},\n",
              "  {'loss': 2.0206031799316406, 'acc': 0.4375, 'step': 226},\n",
              "  {'loss': 1.9863388538360596, 'acc': 0.625, 'step': 227},\n",
              "  {'loss': 2.0266520977020264, 'acc': 0.4375, 'step': 228},\n",
              "  {'loss': 1.9986851215362549, 'acc': 0.4375, 'step': 229},\n",
              "  {'loss': 2.078728675842285, 'acc': 0.28125, 'step': 230},\n",
              "  {'loss': 1.9842584133148193, 'acc': 0.5, 'step': 231},\n",
              "  {'loss': 2.0166678428649902, 'acc': 0.46875, 'step': 232},\n",
              "  {'loss': 1.9957599639892578, 'acc': 0.53125, 'step': 233},\n",
              "  {'loss': 2.0297439098358154, 'acc': 0.34375, 'step': 234},\n",
              "  {'loss': 1.9742118120193481, 'acc': 0.40625, 'step': 235},\n",
              "  {'loss': 2.039290189743042, 'acc': 0.28125, 'step': 236},\n",
              "  {'loss': 1.9966270923614502, 'acc': 0.40625, 'step': 237},\n",
              "  {'loss': 1.96811842918396, 'acc': 0.375, 'step': 238},\n",
              "  {'loss': 1.9731299877166748, 'acc': 0.53125, 'step': 239},\n",
              "  {'loss': 1.964077115058899, 'acc': 0.59375, 'step': 240},\n",
              "  {'loss': 1.9823709726333618, 'acc': 0.59375, 'step': 241},\n",
              "  {'loss': 2.039146661758423, 'acc': 0.25, 'step': 242},\n",
              "  {'loss': 2.054062604904175, 'acc': 0.28125, 'step': 243},\n",
              "  {'loss': 1.9377412796020508, 'acc': 0.375, 'step': 244},\n",
              "  {'loss': 1.9407126903533936, 'acc': 0.4375, 'step': 245},\n",
              "  {'loss': 1.9804712533950806, 'acc': 0.375, 'step': 246},\n",
              "  {'loss': 1.937726616859436, 'acc': 0.53125, 'step': 247},\n",
              "  {'loss': 1.959786057472229, 'acc': 0.40625, 'step': 248},\n",
              "  {'loss': 1.9751205444335938, 'acc': 0.46875, 'step': 249},\n",
              "  {'loss': 2.0090389251708984, 'acc': 0.40625, 'step': 250},\n",
              "  {'loss': 1.9043517112731934, 'acc': 0.59375, 'step': 251},\n",
              "  {'loss': 1.9535051584243774, 'acc': 0.3125, 'step': 252},\n",
              "  {'loss': 1.895753026008606, 'acc': 0.53125, 'step': 253},\n",
              "  {'loss': 1.9664965867996216, 'acc': 0.34375, 'step': 254},\n",
              "  {'loss': 1.9541983604431152, 'acc': 0.40625, 'step': 255},\n",
              "  {'loss': 1.9066194295883179, 'acc': 0.5, 'step': 256},\n",
              "  {'loss': 1.8561359643936157, 'acc': 0.65625, 'step': 257},\n",
              "  {'loss': 2.0129647254943848, 'acc': 0.375, 'step': 258},\n",
              "  {'loss': 1.8333628177642822, 'acc': 0.59375, 'step': 259},\n",
              "  {'loss': 1.9445983171463013, 'acc': 0.53125, 'step': 260},\n",
              "  {'loss': 1.9512453079223633, 'acc': 0.46875, 'step': 261},\n",
              "  {'loss': 1.9325939416885376, 'acc': 0.40625, 'step': 262},\n",
              "  {'loss': 1.9220043420791626, 'acc': 0.5, 'step': 263},\n",
              "  {'loss': 1.8819200992584229, 'acc': 0.53125, 'step': 264},\n",
              "  {'loss': 1.889715313911438, 'acc': 0.59375, 'step': 265},\n",
              "  {'loss': 1.9392259120941162, 'acc': 0.53125, 'step': 266},\n",
              "  {'loss': 1.8809025287628174, 'acc': 0.5625, 'step': 267},\n",
              "  {'loss': 1.9024115800857544, 'acc': 0.40625, 'step': 268},\n",
              "  {'loss': 1.889274001121521, 'acc': 0.53125, 'step': 269},\n",
              "  {'loss': 1.8733179569244385, 'acc': 0.5625, 'step': 270},\n",
              "  {'loss': 1.967856526374817, 'acc': 0.375, 'step': 271},\n",
              "  {'loss': 1.8776668310165405, 'acc': 0.53125, 'step': 272},\n",
              "  {'loss': 1.891845941543579, 'acc': 0.5, 'step': 273},\n",
              "  {'loss': 1.8118884563446045, 'acc': 0.59375, 'step': 274},\n",
              "  {'loss': 1.839486837387085, 'acc': 0.5625, 'step': 275},\n",
              "  {'loss': 1.9151792526245117, 'acc': 0.4375, 'step': 276},\n",
              "  {'loss': 1.8120936155319214, 'acc': 0.625, 'step': 277},\n",
              "  {'loss': 1.8811731338500977, 'acc': 0.40625, 'step': 278},\n",
              "  {'loss': 1.880062460899353, 'acc': 0.5, 'step': 279},\n",
              "  {'loss': 1.8584028482437134, 'acc': 0.53125, 'step': 280},\n",
              "  {'loss': 1.8214486837387085, 'acc': 0.5625, 'step': 281},\n",
              "  {'loss': 1.8861804008483887, 'acc': 0.4375, 'step': 282},\n",
              "  {'loss': 1.8745096921920776, 'acc': 0.4375, 'step': 283},\n",
              "  {'loss': 1.8429388999938965, 'acc': 0.375, 'step': 284},\n",
              "  {'loss': 1.8358962535858154, 'acc': 0.5, 'step': 285},\n",
              "  {'loss': 1.8882287740707397, 'acc': 0.46875, 'step': 286},\n",
              "  {'loss': 1.8367204666137695, 'acc': 0.53125, 'step': 287},\n",
              "  {'loss': 1.8998366594314575, 'acc': 0.59375, 'step': 288},\n",
              "  {'loss': 1.7650097608566284, 'acc': 0.53125, 'step': 289},\n",
              "  {'loss': 1.8083866834640503, 'acc': 0.5625, 'step': 290},\n",
              "  {'loss': 1.8574681282043457, 'acc': 0.53125, 'step': 291},\n",
              "  {'loss': 1.8231544494628906, 'acc': 0.53125, 'step': 292},\n",
              "  {'loss': 1.8021272420883179, 'acc': 0.53125, 'step': 293},\n",
              "  {'loss': 1.8605146408081055, 'acc': 0.4375, 'step': 294},\n",
              "  {'loss': 1.8497307300567627, 'acc': 0.53125, 'step': 295},\n",
              "  {'loss': 1.8345667123794556, 'acc': 0.5625, 'step': 296},\n",
              "  {'loss': 1.808204174041748, 'acc': 0.53125, 'step': 297},\n",
              "  {'loss': 1.844547152519226, 'acc': 0.375, 'step': 298},\n",
              "  {'loss': 1.6897553205490112, 'acc': 0.625, 'step': 299},\n",
              "  {'loss': 1.7772525548934937, 'acc': 0.65625, 'step': 300},\n",
              "  {'loss': 1.849188208580017, 'acc': 0.40625, 'step': 301},\n",
              "  {'loss': 1.787474274635315, 'acc': 0.53125, 'step': 302},\n",
              "  {'loss': 1.7162646055221558, 'acc': 0.5625, 'step': 303},\n",
              "  {'loss': 1.7089018821716309, 'acc': 0.625, 'step': 304},\n",
              "  {'loss': 1.5883879661560059, 'acc': 0.75, 'step': 305},\n",
              "  {'loss': 1.6781519651412964, 'acc': 0.65625, 'step': 306},\n",
              "  {'loss': 1.8307244777679443, 'acc': 0.4375, 'step': 307},\n",
              "  {'loss': 1.7089180946350098, 'acc': 0.5625, 'step': 308},\n",
              "  {'loss': 1.717972993850708, 'acc': 0.59375, 'step': 309},\n",
              "  {'loss': 1.7239861488342285, 'acc': 0.625, 'step': 310},\n",
              "  {'loss': 1.7680084705352783, 'acc': 0.4375, 'step': 311},\n",
              "  {'loss': 1.7127370834350586, 'acc': 0.5, 'step': 312},\n",
              "  {'loss': 1.8054728507995605, 'acc': 0.34375, 'step': 313},\n",
              "  {'loss': 1.7361087799072266, 'acc': 0.59375, 'step': 314},\n",
              "  {'loss': 1.8661799430847168, 'acc': 0.4375, 'step': 315},\n",
              "  {'loss': 1.7796329259872437, 'acc': 0.4375, 'step': 316},\n",
              "  {'loss': 1.7587237358093262, 'acc': 0.5625, 'step': 317},\n",
              "  {'loss': 1.7672621011734009, 'acc': 0.5625, 'step': 318},\n",
              "  {'loss': 1.6630899906158447, 'acc': 0.65625, 'step': 319},\n",
              "  {'loss': 1.7905588150024414, 'acc': 0.40625, 'step': 320},\n",
              "  {'loss': 1.7406325340270996, 'acc': 0.53125, 'step': 321},\n",
              "  {'loss': 1.736911416053772, 'acc': 0.5, 'step': 322},\n",
              "  {'loss': 1.6393266916275024, 'acc': 0.6875, 'step': 323},\n",
              "  {'loss': 1.7056057453155518, 'acc': 0.5, 'step': 324},\n",
              "  {'loss': 1.7964977025985718, 'acc': 0.46875, 'step': 325},\n",
              "  {'loss': 1.6682298183441162, 'acc': 0.53125, 'step': 326},\n",
              "  {'loss': 1.7269734144210815, 'acc': 0.46875, 'step': 327},\n",
              "  {'loss': 1.6329362392425537, 'acc': 0.5625, 'step': 328},\n",
              "  {'loss': 1.6301817893981934, 'acc': 0.5, 'step': 329},\n",
              "  {'loss': 1.5521588325500488, 'acc': 0.71875, 'step': 330},\n",
              "  {'loss': 1.6518641710281372, 'acc': 0.5625, 'step': 331},\n",
              "  {'loss': 1.7513651847839355, 'acc': 0.46875, 'step': 332},\n",
              "  {'loss': 1.720070481300354, 'acc': 0.3125, 'step': 333},\n",
              "  {'loss': 1.7323061227798462, 'acc': 0.4375, 'step': 334},\n",
              "  {'loss': 1.693331003189087, 'acc': 0.375, 'step': 335},\n",
              "  {'loss': 1.593548059463501, 'acc': 0.53125, 'step': 336},\n",
              "  {'loss': 1.6671257019042969, 'acc': 0.53125, 'step': 337},\n",
              "  {'loss': 1.6392956972122192, 'acc': 0.5, 'step': 338},\n",
              "  {'loss': 1.7227983474731445, 'acc': 0.53125, 'step': 339},\n",
              "  {'loss': 1.644524097442627, 'acc': 0.5625, 'step': 340},\n",
              "  {'loss': 1.65849769115448, 'acc': 0.5, 'step': 341},\n",
              "  {'loss': 1.5733636617660522, 'acc': 0.5625, 'step': 342},\n",
              "  {'loss': 1.7370190620422363, 'acc': 0.46875, 'step': 343},\n",
              "  {'loss': 1.6734189987182617, 'acc': 0.40625, 'step': 344},\n",
              "  {'loss': 1.5318629741668701, 'acc': 0.71875, 'step': 345},\n",
              "  {'loss': 1.7224270105361938, 'acc': 0.4375, 'step': 346},\n",
              "  {'loss': 1.6446938514709473, 'acc': 0.46875, 'step': 347},\n",
              "  {'loss': 1.5931904315948486, 'acc': 0.5, 'step': 348},\n",
              "  {'loss': 1.6241124868392944, 'acc': 0.53125, 'step': 349},\n",
              "  {'loss': 1.5558924674987793, 'acc': 0.5625, 'step': 350},\n",
              "  {'loss': 1.7078701257705688, 'acc': 0.3125, 'step': 351},\n",
              "  {'loss': 1.6389539241790771, 'acc': 0.59375, 'step': 352},\n",
              "  {'loss': 1.6002310514450073, 'acc': 0.71875, 'step': 353},\n",
              "  {'loss': 1.587658405303955, 'acc': 0.6875, 'step': 354},\n",
              "  {'loss': 1.4457316398620605, 'acc': 0.6875, 'step': 355},\n",
              "  {'loss': 1.5740104913711548, 'acc': 0.53125, 'step': 356},\n",
              "  {'loss': 1.5281319618225098, 'acc': 0.59375, 'step': 357},\n",
              "  {'loss': 1.6114997863769531, 'acc': 0.5, 'step': 358},\n",
              "  {'loss': 1.5043400526046753, 'acc': 0.5, 'step': 359},\n",
              "  {'loss': 1.5592796802520752, 'acc': 0.5625, 'step': 360},\n",
              "  {'loss': 1.614485740661621, 'acc': 0.5, 'step': 361},\n",
              "  {'loss': 1.6007614135742188, 'acc': 0.4375, 'step': 362},\n",
              "  {'loss': 1.6039631366729736, 'acc': 0.53125, 'step': 363},\n",
              "  {'loss': 1.5377753973007202, 'acc': 0.625, 'step': 364},\n",
              "  {'loss': 1.5896021127700806, 'acc': 0.5, 'step': 365},\n",
              "  {'loss': 1.553815484046936, 'acc': 0.625, 'step': 366},\n",
              "  {'loss': 1.4640311002731323, 'acc': 0.625, 'step': 367},\n",
              "  {'loss': 1.5016555786132812, 'acc': 0.5625, 'step': 368},\n",
              "  {'loss': 1.5950937271118164, 'acc': 0.46875, 'step': 369},\n",
              "  {'loss': 1.591598629951477, 'acc': 0.375, 'step': 370},\n",
              "  {'loss': 1.573455810546875, 'acc': 0.5, 'step': 371},\n",
              "  {'loss': 1.4935879707336426, 'acc': 0.625, 'step': 372},\n",
              "  {'loss': 1.697452187538147, 'acc': 0.4375, 'step': 373},\n",
              "  {'loss': 1.542620301246643, 'acc': 0.5, 'step': 374},\n",
              "  {'loss': 1.5461372137069702, 'acc': 0.5, 'step': 375},\n",
              "  {'loss': 1.5362917184829712, 'acc': 0.5, 'step': 376},\n",
              "  {'loss': 1.386152982711792, 'acc': 0.78125, 'step': 377},\n",
              "  {'loss': 1.610516905784607, 'acc': 0.46875, 'step': 378},\n",
              "  {'loss': 1.4876070022583008, 'acc': 0.5625, 'step': 379},\n",
              "  {'loss': 1.4690020084381104, 'acc': 0.53125, 'step': 380},\n",
              "  {'loss': 1.6038974523544312, 'acc': 0.53125, 'step': 381},\n",
              "  {'loss': 1.4727941751480103, 'acc': 0.59375, 'step': 382},\n",
              "  {'loss': 1.491049885749817, 'acc': 0.53125, 'step': 383},\n",
              "  {'loss': 1.4494551420211792, 'acc': 0.65625, 'step': 384},\n",
              "  {'loss': 1.521477222442627, 'acc': 0.5, 'step': 385},\n",
              "  {'loss': 1.4764138460159302, 'acc': 0.59375, 'step': 386},\n",
              "  {'loss': 1.4375559091567993, 'acc': 0.625, 'step': 387},\n",
              "  {'loss': 1.4046237468719482, 'acc': 0.59375, 'step': 388},\n",
              "  {'loss': 1.4360628128051758, 'acc': 0.6875, 'step': 389},\n",
              "  {'loss': 1.4692034721374512, 'acc': 0.53125, 'step': 390},\n",
              "  {'loss': 1.4334325790405273, 'acc': 0.65625, 'step': 391},\n",
              "  {'loss': 1.453658103942871, 'acc': 0.59375, 'step': 392},\n",
              "  {'loss': 1.5699858665466309, 'acc': 0.5, 'step': 393},\n",
              "  {'loss': 1.4718408584594727, 'acc': 0.5, 'step': 394},\n",
              "  {'loss': 1.508253574371338, 'acc': 0.5, 'step': 395},\n",
              "  {'loss': 1.598271131515503, 'acc': 0.46875, 'step': 396},\n",
              "  {'loss': 1.4877642393112183, 'acc': 0.5, 'step': 397},\n",
              "  {'loss': 1.400084137916565, 'acc': 0.65625, 'step': 398},\n",
              "  {'loss': 1.3332469463348389, 'acc': 0.59375, 'step': 399},\n",
              "  {'loss': 1.4099185466766357, 'acc': 0.59375, 'step': 400},\n",
              "  {'loss': 1.352468729019165, 'acc': 0.71875, 'step': 401},\n",
              "  {'loss': 1.327505350112915, 'acc': 0.6875, 'step': 402},\n",
              "  {'loss': 1.5214277505874634, 'acc': 0.5625, 'step': 403},\n",
              "  {'loss': 1.330129861831665, 'acc': 0.71875, 'step': 404},\n",
              "  {'loss': 1.4527419805526733, 'acc': 0.4375, 'step': 405},\n",
              "  {'loss': 1.5075873136520386, 'acc': 0.5, 'step': 406},\n",
              "  {'loss': 1.3747997283935547, 'acc': 0.59375, 'step': 407},\n",
              "  {'loss': 1.4440088272094727, 'acc': 0.5, 'step': 408},\n",
              "  {'loss': 1.4367635250091553, 'acc': 0.59375, 'step': 409},\n",
              "  {'loss': 1.4994041919708252, 'acc': 0.5625, 'step': 410},\n",
              "  {'loss': 1.4128518104553223, 'acc': 0.5625, 'step': 411},\n",
              "  {'loss': 1.3884530067443848, 'acc': 0.6875, 'step': 412},\n",
              "  {'loss': 1.4784739017486572, 'acc': 0.46875, 'step': 413},\n",
              "  {'loss': 1.3642698526382446, 'acc': 0.5625, 'step': 414},\n",
              "  {'loss': 1.4557676315307617, 'acc': 0.5625, 'step': 415},\n",
              "  {'loss': 1.466718316078186, 'acc': 0.5, 'step': 416},\n",
              "  {'loss': 1.293784499168396, 'acc': 0.71875, 'step': 417},\n",
              "  {'loss': 1.3175410032272339, 'acc': 0.59375, 'step': 418},\n",
              "  {'loss': 1.2688710689544678, 'acc': 0.625, 'step': 419},\n",
              "  {'loss': 1.5444104671478271, 'acc': 0.375, 'step': 420},\n",
              "  {'loss': 1.4667413234710693, 'acc': 0.5, 'step': 421},\n",
              "  {'loss': 1.4544708728790283, 'acc': 0.53125, 'step': 422},\n",
              "  {'loss': 1.4015792608261108, 'acc': 0.53125, 'step': 423},\n",
              "  {'loss': 1.4383827447891235, 'acc': 0.46875, 'step': 424},\n",
              "  {'loss': 1.427838921546936, 'acc': 0.46875, 'step': 425},\n",
              "  {'loss': 1.2894139289855957, 'acc': 0.59375, 'step': 426},\n",
              "  {'loss': 1.2864761352539062, 'acc': 0.6875, 'step': 427},\n",
              "  {'loss': 1.5100616216659546, 'acc': 0.46875, 'step': 428},\n",
              "  {'loss': 1.3655511140823364, 'acc': 0.625, 'step': 429},\n",
              "  {'loss': 1.386493444442749, 'acc': 0.53125, 'step': 430},\n",
              "  {'loss': 1.3820794820785522, 'acc': 0.5625, 'step': 431},\n",
              "  {'loss': 1.2732957601547241, 'acc': 0.6875, 'step': 432},\n",
              "  {'loss': 1.3790911436080933, 'acc': 0.65625, 'step': 433},\n",
              "  {'loss': 1.2241568565368652, 'acc': 0.6875, 'step': 434},\n",
              "  {'loss': 1.295922040939331, 'acc': 0.5625, 'step': 435},\n",
              "  {'loss': 1.5324022769927979, 'acc': 0.65625, 'step': 436},\n",
              "  {'loss': 1.3660858869552612, 'acc': 0.5625, 'step': 437},\n",
              "  {'loss': 1.2007774114608765, 'acc': 0.75, 'step': 438},\n",
              "  {'loss': 1.4617527723312378, 'acc': 0.5, 'step': 439},\n",
              "  {'loss': 1.4265995025634766, 'acc': 0.5625, 'step': 440},\n",
              "  {'loss': 1.5477147102355957, 'acc': 0.375, 'step': 441},\n",
              "  {'loss': 1.3924981355667114, 'acc': 0.59375, 'step': 442},\n",
              "  {'loss': 1.3898601531982422, 'acc': 0.5625, 'step': 443},\n",
              "  {'loss': 1.5673511028289795, 'acc': 0.5625, 'step': 444},\n",
              "  {'loss': 1.3533111810684204, 'acc': 0.5, 'step': 445},\n",
              "  {'loss': 1.3427056074142456, 'acc': 0.46875, 'step': 446},\n",
              "  {'loss': 1.2140324115753174, 'acc': 0.65625, 'step': 447},\n",
              "  {'loss': 1.2731636762619019, 'acc': 0.53125, 'step': 448},\n",
              "  {'loss': 1.4604601860046387, 'acc': 0.5625, 'step': 449},\n",
              "  {'loss': 1.3407126665115356, 'acc': 0.5625, 'step': 450},\n",
              "  {'loss': 1.2266825437545776, 'acc': 0.71875, 'step': 451},\n",
              "  {'loss': 1.1908620595932007, 'acc': 0.8125, 'step': 452},\n",
              "  {'loss': 1.237710952758789, 'acc': 0.625, 'step': 453},\n",
              "  {'loss': 1.294313907623291, 'acc': 0.59375, 'step': 454},\n",
              "  {'loss': 1.2446922063827515, 'acc': 0.59375, 'step': 455},\n",
              "  {'loss': 1.331666111946106, 'acc': 0.5625, 'step': 456},\n",
              "  {'loss': 1.3254601955413818, 'acc': 0.59375, 'step': 457},\n",
              "  {'loss': 1.3091565370559692, 'acc': 0.65625, 'step': 458},\n",
              "  {'loss': 1.2429276704788208, 'acc': 0.5625, 'step': 459},\n",
              "  {'loss': 1.0419390201568604, 'acc': 0.78125, 'step': 460},\n",
              "  {'loss': 1.2798992395401, 'acc': 0.625, 'step': 461},\n",
              "  {'loss': 1.4349188804626465, 'acc': 0.625, 'step': 462},\n",
              "  {'loss': 1.2436105012893677, 'acc': 0.6875, 'step': 463},\n",
              "  {'loss': 1.2111124992370605, 'acc': 0.6875, 'step': 464},\n",
              "  {'loss': 1.2665637731552124, 'acc': 0.6875, 'step': 465},\n",
              "  {'loss': 1.3560367822647095, 'acc': 0.5, 'step': 466},\n",
              "  {'loss': 1.355939269065857, 'acc': 0.65625, 'step': 467},\n",
              "  {'loss': 1.2561737298965454, 'acc': 0.6875, 'step': 468},\n",
              "  {'loss': 1.2078806161880493, 'acc': 0.625, 'step': 469},\n",
              "  {'loss': 1.240286946296692, 'acc': 0.5, 'step': 470},\n",
              "  {'loss': 1.2940123081207275, 'acc': 0.65625, 'step': 471},\n",
              "  {'loss': 1.1399301290512085, 'acc': 0.6875, 'step': 472},\n",
              "  {'loss': 1.312734842300415, 'acc': 0.5, 'step': 473},\n",
              "  {'loss': 1.3109018802642822, 'acc': 0.5, 'step': 474},\n",
              "  {'loss': 1.4423915147781372, 'acc': 0.46875, 'step': 475},\n",
              "  {'loss': 1.2766549587249756, 'acc': 0.65625, 'step': 476},\n",
              "  {'loss': 1.4176491498947144, 'acc': 0.46875, 'step': 477},\n",
              "  {'loss': 1.2429710626602173, 'acc': 0.59375, 'step': 478},\n",
              "  {'loss': 1.3329488039016724, 'acc': 0.53125, 'step': 479},\n",
              "  {'loss': 1.3613423109054565, 'acc': 0.5625, 'step': 480},\n",
              "  {'loss': 1.2086478471755981, 'acc': 0.6875, 'step': 481},\n",
              "  {'loss': 1.2420834302902222, 'acc': 0.5, 'step': 482},\n",
              "  {'loss': 1.1063573360443115, 'acc': 0.625, 'step': 483},\n",
              "  {'loss': 1.1137210130691528, 'acc': 0.6875, 'step': 484},\n",
              "  {'loss': 1.0888596773147583, 'acc': 0.71875, 'step': 485},\n",
              "  {'loss': 1.1387794017791748, 'acc': 0.625, 'step': 486},\n",
              "  {'loss': 1.239762306213379, 'acc': 0.625, 'step': 487},\n",
              "  {'loss': 1.051979899406433, 'acc': 0.625, 'step': 488},\n",
              "  {'loss': 1.2925564050674438, 'acc': 0.53125, 'step': 489},\n",
              "  {'loss': 1.3213499784469604, 'acc': 0.5625, 'step': 490},\n",
              "  {'loss': 1.1862306594848633, 'acc': 0.53125, 'step': 491},\n",
              "  {'loss': 1.2123920917510986, 'acc': 0.5625, 'step': 492},\n",
              "  {'loss': 1.171635389328003, 'acc': 0.6875, 'step': 493},\n",
              "  {'loss': 1.2657122611999512, 'acc': 0.53125, 'step': 494},\n",
              "  {'loss': 1.2392323017120361, 'acc': 0.5, 'step': 495},\n",
              "  {'loss': 1.2361743450164795, 'acc': 0.625, 'step': 496},\n",
              "  {'loss': 1.2331557273864746, 'acc': 0.65625, 'step': 497},\n",
              "  {'loss': 1.2538031339645386, 'acc': 0.5625, 'step': 498},\n",
              "  {'loss': 1.3471825122833252, 'acc': 0.46875, 'step': 499},\n",
              "  {'loss': 1.2370949983596802, 'acc': 0.65625, 'step': 500},\n",
              "  {'loss': 1.0902024507522583, 'acc': 0.78125, 'step': 501},\n",
              "  {'loss': 1.1436538696289062, 'acc': 0.59375, 'step': 502},\n",
              "  {'loss': 1.010896921157837, 'acc': 0.75, 'step': 503},\n",
              "  {'loss': 1.2620631456375122, 'acc': 0.6875, 'step': 504},\n",
              "  {'loss': 1.1711198091506958, 'acc': 0.6875, 'step': 505},\n",
              "  {'loss': 1.1074845790863037, 'acc': 0.625, 'step': 506},\n",
              "  {'loss': 1.1551628112792969, 'acc': 0.65625, 'step': 507},\n",
              "  {'loss': 1.280645728111267, 'acc': 0.53125, 'step': 508},\n",
              "  {'loss': 1.2600394487380981, 'acc': 0.6875, 'step': 509},\n",
              "  {'loss': 1.1105633974075317, 'acc': 0.75, 'step': 510},\n",
              "  {'loss': 1.350550889968872, 'acc': 0.5625, 'step': 511},\n",
              "  {'loss': 1.208345651626587, 'acc': 0.6875, 'step': 512},\n",
              "  {'loss': 1.2079566717147827, 'acc': 0.625, 'step': 513},\n",
              "  {'loss': 1.1786823272705078, 'acc': 0.75, 'step': 514},\n",
              "  {'loss': 1.246410846710205, 'acc': 0.6875, 'step': 515},\n",
              "  {'loss': 1.1297519207000732, 'acc': 0.65625, 'step': 516},\n",
              "  {'loss': 0.9991152286529541, 'acc': 0.78125, 'step': 517},\n",
              "  {'loss': 1.1746275424957275, 'acc': 0.65625, 'step': 518},\n",
              "  {'loss': 1.1808220148086548, 'acc': 0.65625, 'step': 519},\n",
              "  {'loss': 1.0501559972763062, 'acc': 0.75, 'step': 520},\n",
              "  {'loss': 1.3605339527130127, 'acc': 0.59375, 'step': 521},\n",
              "  {'loss': 1.1437331438064575, 'acc': 0.75, 'step': 522},\n",
              "  {'loss': 1.0985925197601318, 'acc': 0.6875, 'step': 523},\n",
              "  {'loss': 1.0637469291687012, 'acc': 0.78125, 'step': 524},\n",
              "  {'loss': 1.1861637830734253, 'acc': 0.71875, 'step': 525},\n",
              "  {'loss': 1.2162675857543945, 'acc': 0.65625, 'step': 526},\n",
              "  {'loss': 1.1663286685943604, 'acc': 0.71875, 'step': 527},\n",
              "  {'loss': 0.9866326451301575, 'acc': 0.71875, 'step': 528},\n",
              "  {'loss': 1.0946319103240967, 'acc': 0.65625, 'step': 529},\n",
              "  {'loss': 1.1889381408691406, 'acc': 0.53125, 'step': 530},\n",
              "  {'loss': 1.0348929166793823, 'acc': 0.75, 'step': 531},\n",
              "  {'loss': 1.2153456211090088, 'acc': 0.59375, 'step': 532},\n",
              "  {'loss': 1.0627259016036987, 'acc': 0.71875, 'step': 533},\n",
              "  {'loss': 1.2572026252746582, 'acc': 0.5, 'step': 534},\n",
              "  {'loss': 1.1962599754333496, 'acc': 0.53125, 'step': 535},\n",
              "  {'loss': 1.2307250499725342, 'acc': 0.59375, 'step': 536},\n",
              "  {'loss': 1.26204252243042, 'acc': 0.5, 'step': 537},\n",
              "  {'loss': 1.0528631210327148, 'acc': 0.6875, 'step': 538},\n",
              "  {'loss': 1.1281390190124512, 'acc': 0.65625, 'step': 539},\n",
              "  {'loss': 0.9582748413085938, 'acc': 0.625, 'step': 540},\n",
              "  {'loss': 1.12035071849823, 'acc': 0.6875, 'step': 541},\n",
              "  {'loss': 1.0903130769729614, 'acc': 0.59375, 'step': 542},\n",
              "  {'loss': 1.0813493728637695, 'acc': 0.625, 'step': 543},\n",
              "  {'loss': 1.0014878511428833, 'acc': 0.71875, 'step': 544},\n",
              "  {'loss': 1.096220850944519, 'acc': 0.65625, 'step': 545},\n",
              "  {'loss': 1.0223939418792725, 'acc': 0.75, 'step': 546},\n",
              "  {'loss': 1.048588752746582, 'acc': 0.84375, 'step': 547},\n",
              "  {'loss': 1.1107908487319946, 'acc': 0.6875, 'step': 548},\n",
              "  {'loss': 1.116451621055603, 'acc': 0.59375, 'step': 549},\n",
              "  {'loss': 1.0181708335876465, 'acc': 0.78125, 'step': 550},\n",
              "  {'loss': 1.0413596630096436, 'acc': 0.65625, 'step': 551},\n",
              "  {'loss': 0.8092523813247681, 'acc': 0.8125, 'step': 552},\n",
              "  {'loss': 1.02572762966156, 'acc': 0.6875, 'step': 553},\n",
              "  {'loss': 1.167598843574524, 'acc': 0.59375, 'step': 554},\n",
              "  {'loss': 1.076054334640503, 'acc': 0.6875, 'step': 555},\n",
              "  {'loss': 1.2702842950820923, 'acc': 0.53125, 'step': 556},\n",
              "  {'loss': 1.0777627229690552, 'acc': 0.65625, 'step': 557},\n",
              "  {'loss': 1.0493253469467163, 'acc': 0.6875, 'step': 558},\n",
              "  {'loss': 1.0943700075149536, 'acc': 0.625, 'step': 559},\n",
              "  {'loss': 1.023659348487854, 'acc': 0.71875, 'step': 560},\n",
              "  {'loss': 1.087213158607483, 'acc': 0.71875, 'step': 561},\n",
              "  {'loss': 1.162118673324585, 'acc': 0.53125, 'step': 562},\n",
              "  {'loss': 1.2209492921829224, 'acc': 0.4375, 'step': 563},\n",
              "  {'loss': 1.1244137287139893, 'acc': 0.625, 'step': 564},\n",
              "  {'loss': 1.0400452613830566, 'acc': 0.5625, 'step': 565},\n",
              "  {'loss': 1.1905386447906494, 'acc': 0.5, 'step': 566},\n",
              "  {'loss': 1.048956274986267, 'acc': 0.59375, 'step': 567},\n",
              "  {'loss': 0.9071407914161682, 'acc': 0.6875, 'step': 568},\n",
              "  {'loss': 0.9481136202812195, 'acc': 0.625, 'step': 569},\n",
              "  {'loss': 1.2944915294647217, 'acc': 0.46875, 'step': 570},\n",
              "  {'loss': 1.124314546585083, 'acc': 0.5625, 'step': 571},\n",
              "  {'loss': 0.9592580795288086, 'acc': 0.71875, 'step': 572},\n",
              "  {'loss': 1.0027514696121216, 'acc': 0.59375, 'step': 573},\n",
              "  {'loss': 1.127434253692627, 'acc': 0.625, 'step': 574},\n",
              "  {'loss': 0.9662194848060608, 'acc': 0.625, 'step': 575},\n",
              "  {'loss': 1.1263514757156372, 'acc': 0.5625, 'step': 576},\n",
              "  {'loss': 1.0429260730743408, 'acc': 0.625, 'step': 577},\n",
              "  {'loss': 1.1913111209869385, 'acc': 0.53125, 'step': 578},\n",
              "  {'loss': 0.8630948066711426, 'acc': 0.75, 'step': 579},\n",
              "  {'loss': 1.1306589841842651, 'acc': 0.5, 'step': 580},\n",
              "  {'loss': 0.8571184277534485, 'acc': 0.71875, 'step': 581},\n",
              "  {'loss': 1.0005648136138916, 'acc': 0.6875, 'step': 582},\n",
              "  {'loss': 1.0131436586380005, 'acc': 0.6875, 'step': 583},\n",
              "  {'loss': 1.0715992450714111, 'acc': 0.6875, 'step': 584},\n",
              "  {'loss': 0.9535424709320068, 'acc': 0.71875, 'step': 585},\n",
              "  {'loss': 0.9728766083717346, 'acc': 0.71875, 'step': 586},\n",
              "  {'loss': 1.132547378540039, 'acc': 0.625, 'step': 587},\n",
              "  {'loss': 0.9985921382904053, 'acc': 0.75, 'step': 588},\n",
              "  {'loss': 1.0491712093353271, 'acc': 0.6875, 'step': 589},\n",
              "  {'loss': 1.206699252128601, 'acc': 0.59375, 'step': 590},\n",
              "  {'loss': 0.9735467433929443, 'acc': 0.6875, 'step': 591},\n",
              "  {'loss': 1.1871048212051392, 'acc': 0.5625, 'step': 592},\n",
              "  {'loss': 1.0781042575836182, 'acc': 0.625, 'step': 593},\n",
              "  {'loss': 1.2415908575057983, 'acc': 0.65625, 'step': 594},\n",
              "  {'loss': 1.2306897640228271, 'acc': 0.5625, 'step': 595},\n",
              "  {'loss': 0.9943014979362488, 'acc': 0.59375, 'step': 596},\n",
              "  {'loss': 1.3415019512176514, 'acc': 0.53125, 'step': 597},\n",
              "  {'loss': 1.0394989252090454, 'acc': 0.59375, 'step': 598},\n",
              "  {'loss': 1.0007691383361816, 'acc': 0.6875, 'step': 599},\n",
              "  {'loss': 1.0222853422164917, 'acc': 0.78125, 'step': 600},\n",
              "  {'loss': 0.977616548538208, 'acc': 0.59375, 'step': 601},\n",
              "  {'loss': 1.037933588027954, 'acc': 0.6875, 'step': 602},\n",
              "  {'loss': 0.9787302613258362, 'acc': 0.625, 'step': 603},\n",
              "  {'loss': 1.099194049835205, 'acc': 0.6875, 'step': 604},\n",
              "  {'loss': 1.0548324584960938, 'acc': 0.6875, 'step': 605},\n",
              "  {'loss': 0.9659393429756165, 'acc': 0.75, 'step': 606},\n",
              "  {'loss': 0.8334731459617615, 'acc': 0.84375, 'step': 607},\n",
              "  {'loss': 1.4256936311721802, 'acc': 0.375, 'step': 608},\n",
              "  {'loss': 1.1632905006408691, 'acc': 0.5, 'step': 609},\n",
              "  {'loss': 1.1351523399353027, 'acc': 0.5625, 'step': 610},\n",
              "  {'loss': 1.2616292238235474, 'acc': 0.5, 'step': 611},\n",
              "  {'loss': 1.0290894508361816, 'acc': 0.6875, 'step': 612},\n",
              "  {'loss': 1.1222779750823975, 'acc': 0.625, 'step': 613},\n",
              "  {'loss': 1.0459365844726562, 'acc': 0.625, 'step': 614},\n",
              "  {'loss': 1.3705697059631348, 'acc': 0.5, 'step': 615},\n",
              "  {'loss': 1.031423568725586, 'acc': 0.625, 'step': 616},\n",
              "  {'loss': 0.845955491065979, 'acc': 0.78125, 'step': 617},\n",
              "  {'loss': 1.1086540222167969, 'acc': 0.6875, 'step': 618},\n",
              "  {'loss': 1.1454259157180786, 'acc': 0.53125, 'step': 619},\n",
              "  {'loss': 0.9783827662467957, 'acc': 0.6875, 'step': 620},\n",
              "  {'loss': 1.023970603942871, 'acc': 0.625, 'step': 621},\n",
              "  {'loss': 1.1853543519973755, 'acc': 0.46875, 'step': 622},\n",
              "  {'loss': 1.1472082138061523, 'acc': 0.59375, 'step': 623},\n",
              "  {'loss': 1.2260798215866089, 'acc': 0.59375, 'step': 624},\n",
              "  {'loss': 1.361472725868225, 'acc': 0.375, 'step': 625},\n",
              "  {'loss': 1.0993504524230957, 'acc': 0.65625, 'step': 626},\n",
              "  {'loss': 1.0564212799072266, 'acc': 0.5625, 'step': 627},\n",
              "  {'loss': 0.8352997303009033, 'acc': 0.75, 'step': 628},\n",
              "  {'loss': 0.9627347588539124, 'acc': 0.65625, 'step': 629},\n",
              "  {'loss': 1.068149209022522, 'acc': 0.59375, 'step': 630},\n",
              "  {'loss': 0.8825445771217346, 'acc': 0.71875, 'step': 631},\n",
              "  {'loss': 1.0097674131393433, 'acc': 0.65625, 'step': 632},\n",
              "  {'loss': 1.1797528266906738, 'acc': 0.59375, 'step': 633},\n",
              "  {'loss': 1.225185751914978, 'acc': 0.5, 'step': 634},\n",
              "  {'loss': 0.9422131776809692, 'acc': 0.71875, 'step': 635},\n",
              "  {'loss': 1.1248180866241455, 'acc': 0.59375, 'step': 636},\n",
              "  {'loss': 0.9217361211776733, 'acc': 0.8125, 'step': 637},\n",
              "  {'loss': 1.080299973487854, 'acc': 0.53125, 'step': 638},\n",
              "  {'loss': 1.1132166385650635, 'acc': 0.625, 'step': 639},\n",
              "  {'loss': 1.08832848072052, 'acc': 0.59375, 'step': 640},\n",
              "  {'loss': 0.9823922514915466, 'acc': 0.75, 'step': 641},\n",
              "  {'loss': 0.944831371307373, 'acc': 0.625, 'step': 642},\n",
              "  {'loss': 1.071416974067688, 'acc': 0.71875, 'step': 643},\n",
              "  {'loss': 1.0055327415466309, 'acc': 0.71875, 'step': 644},\n",
              "  {'loss': 1.045608401298523, 'acc': 0.71875, 'step': 645},\n",
              "  {'loss': 1.0811972618103027, 'acc': 0.59375, 'step': 646},\n",
              "  {'loss': 0.9950685501098633, 'acc': 0.71875, 'step': 647},\n",
              "  {'loss': 1.019331932067871, 'acc': 0.5625, 'step': 648},\n",
              "  {'loss': 1.0529791116714478, 'acc': 0.65625, 'step': 649},\n",
              "  {'loss': 1.0177985429763794, 'acc': 0.65625, 'step': 650},\n",
              "  {'loss': 1.069338083267212, 'acc': 0.625, 'step': 651},\n",
              "  {'loss': 1.0421695709228516, 'acc': 0.65625, 'step': 652},\n",
              "  {'loss': 1.1347736120224, 'acc': 0.5625, 'step': 653},\n",
              "  {'loss': 1.0550142526626587, 'acc': 0.65625, 'step': 654},\n",
              "  {'loss': 1.1458539962768555, 'acc': 0.4375, 'step': 655},\n",
              "  {'loss': 1.1114126443862915, 'acc': 0.53125, 'step': 656},\n",
              "  {'loss': 1.2768423557281494, 'acc': 0.59375, 'step': 657},\n",
              "  {'loss': 1.2602746486663818, 'acc': 0.53125, 'step': 658},\n",
              "  {'loss': 1.2523787021636963, 'acc': 0.625, 'step': 659},\n",
              "  {'loss': 0.782332718372345, 'acc': 0.8125, 'step': 660},\n",
              "  {'loss': 1.0277290344238281, 'acc': 0.625, 'step': 661},\n",
              "  {'loss': 0.9937951564788818, 'acc': 0.6875, 'step': 662},\n",
              "  {'loss': 0.8018901348114014, 'acc': 0.8125, 'step': 663},\n",
              "  {'loss': 0.8648931384086609, 'acc': 0.71875, 'step': 664},\n",
              "  {'loss': 0.8541848659515381, 'acc': 0.71875, 'step': 665},\n",
              "  {'loss': 0.9280970692634583, 'acc': 0.65625, 'step': 666},\n",
              "  {'loss': 1.1040880680084229, 'acc': 0.59375, 'step': 667},\n",
              "  {'loss': 0.9442288279533386, 'acc': 0.65625, 'step': 668},\n",
              "  {'loss': 0.9309792518615723, 'acc': 0.6875, 'step': 669},\n",
              "  {'loss': 0.9100919365882874, 'acc': 0.65625, 'step': 670},\n",
              "  {'loss': 1.2358654737472534, 'acc': 0.5625, 'step': 671},\n",
              "  {'loss': 1.1704970598220825, 'acc': 0.59375, 'step': 672},\n",
              "  {'loss': 0.9068263173103333, 'acc': 0.6875, 'step': 673},\n",
              "  {'loss': 0.9637512564659119, 'acc': 0.625, 'step': 674},\n",
              "  {'loss': 0.9645942449569702, 'acc': 0.625, 'step': 675},\n",
              "  {'loss': 1.2392535209655762, 'acc': 0.65625, 'step': 676},\n",
              "  {'loss': 0.9109333753585815, 'acc': 0.71875, 'step': 677},\n",
              "  {'loss': 1.1137068271636963, 'acc': 0.5625, 'step': 678},\n",
              "  {'loss': 0.9379857182502747, 'acc': 0.625, 'step': 679},\n",
              "  {'loss': 1.0579311847686768, 'acc': 0.59375, 'step': 680},\n",
              "  {'loss': 0.876837968826294, 'acc': 0.78125, 'step': 681},\n",
              "  {'loss': 0.9528106451034546, 'acc': 0.6875, 'step': 682},\n",
              "  {'loss': 1.0951967239379883, 'acc': 0.59375, 'step': 683},\n",
              "  {'loss': 0.9639661908149719, 'acc': 0.65625, 'step': 684},\n",
              "  {'loss': 1.0793747901916504, 'acc': 0.59375, 'step': 685},\n",
              "  {'loss': 0.9875207543373108, 'acc': 0.6875, 'step': 686},\n",
              "  {'loss': 0.9709277153015137, 'acc': 0.59375, 'step': 687},\n",
              "  {'loss': 1.0253909826278687, 'acc': 0.71875, 'step': 688},\n",
              "  {'loss': 0.9349309206008911, 'acc': 0.6875, 'step': 689},\n",
              "  {'loss': 0.8736526966094971, 'acc': 0.65625, 'step': 690},\n",
              "  {'loss': 0.954620361328125, 'acc': 0.6875, 'step': 691},\n",
              "  {'loss': 0.8297518491744995, 'acc': 0.75, 'step': 692},\n",
              "  {'loss': 1.0927256345748901, 'acc': 0.625, 'step': 693},\n",
              "  {'loss': 0.8816567063331604, 'acc': 0.71875, 'step': 694},\n",
              "  {'loss': 0.9867419600486755, 'acc': 0.625, 'step': 695},\n",
              "  {'loss': 1.0185500383377075, 'acc': 0.8125, 'step': 696},\n",
              "  {'loss': 1.0573740005493164, 'acc': 0.59375, 'step': 697},\n",
              "  {'loss': 0.8784892559051514, 'acc': 0.78125, 'step': 698},\n",
              "  {'loss': 0.7685561180114746, 'acc': 0.75, 'step': 699},\n",
              "  {'loss': 1.0959473848342896, 'acc': 0.59375, 'step': 700},\n",
              "  {'loss': 1.0015158653259277, 'acc': 0.65625, 'step': 701},\n",
              "  {'loss': 0.983018696308136, 'acc': 0.6875, 'step': 702},\n",
              "  {'loss': 0.8930426836013794, 'acc': 0.65625, 'step': 703},\n",
              "  {'loss': 1.0489407777786255, 'acc': 0.6875, 'step': 704},\n",
              "  {'loss': 1.2592103481292725, 'acc': 0.5625, 'step': 705},\n",
              "  {'loss': 0.8148938417434692, 'acc': 0.6875, 'step': 706},\n",
              "  {'loss': 0.8276535868644714, 'acc': 0.65625, 'step': 707},\n",
              "  {'loss': 1.0523462295532227, 'acc': 0.59375, 'step': 708},\n",
              "  {'loss': 1.0828924179077148, 'acc': 0.5625, 'step': 709},\n",
              "  {'loss': 0.9557247161865234, 'acc': 0.5625, 'step': 710},\n",
              "  {'loss': 0.8416888117790222, 'acc': 0.6875, 'step': 711},\n",
              "  {'loss': 1.1463630199432373, 'acc': 0.59375, 'step': 712},\n",
              "  {'loss': 1.0388734340667725, 'acc': 0.5625, 'step': 713},\n",
              "  {'loss': 0.8518689870834351, 'acc': 0.78125, 'step': 714},\n",
              "  {'loss': 0.8995071053504944, 'acc': 0.625, 'step': 715},\n",
              "  {'loss': 0.9549115300178528, 'acc': 0.65625, 'step': 716},\n",
              "  {'loss': 0.9244913458824158, 'acc': 0.71875, 'step': 717},\n",
              "  {'loss': 0.8210723996162415, 'acc': 0.6875, 'step': 718},\n",
              "  {'loss': 0.9601870179176331, 'acc': 0.53125, 'step': 719},\n",
              "  {'loss': 0.8191878795623779, 'acc': 0.6875, 'step': 720},\n",
              "  {'loss': 0.8242951035499573, 'acc': 0.6875, 'step': 721},\n",
              "  {'loss': 1.044880747795105, 'acc': 0.5625, 'step': 722},\n",
              "  {'loss': 0.7634096145629883, 'acc': 0.8125, 'step': 723},\n",
              "  {'loss': 0.9000336527824402, 'acc': 0.625, 'step': 724},\n",
              "  {'loss': 0.7883573174476624, 'acc': 0.84375, 'step': 725},\n",
              "  {'loss': 1.0691187381744385, 'acc': 0.59375, 'step': 726},\n",
              "  {'loss': 0.7947308421134949, 'acc': 0.875, 'step': 727},\n",
              "  {'loss': 0.7651587128639221, 'acc': 0.75, 'step': 728},\n",
              "  {'loss': 0.8244238495826721, 'acc': 0.71875, 'step': 729},\n",
              "  {'loss': 1.0323864221572876, 'acc': 0.53125, 'step': 730},\n",
              "  {'loss': 1.1638116836547852, 'acc': 0.625, 'step': 731},\n",
              "  {'loss': 1.1049331426620483, 'acc': 0.625, 'step': 732},\n",
              "  {'loss': 0.8789620995521545, 'acc': 0.6875, 'step': 733},\n",
              "  {'loss': 0.9840759038925171, 'acc': 0.53125, 'step': 734},\n",
              "  {'loss': 0.8189499378204346, 'acc': 0.78125, 'step': 735},\n",
              "  {'loss': 1.0574136972427368, 'acc': 0.5, 'step': 736},\n",
              "  {'loss': 0.9925622940063477, 'acc': 0.625, 'step': 737},\n",
              "  {'loss': 1.089579463005066, 'acc': 0.625, 'step': 738},\n",
              "  {'loss': 1.1569713354110718, 'acc': 0.46875, 'step': 739},\n",
              "  {'loss': 1.057477355003357, 'acc': 0.65625, 'step': 740},\n",
              "  {'loss': 0.9481610059738159, 'acc': 0.625, 'step': 741},\n",
              "  {'loss': 0.9320700168609619, 'acc': 0.65625, 'step': 742},\n",
              "  {'loss': 0.9114521741867065, 'acc': 0.65625, 'step': 743},\n",
              "  {'loss': 0.8345516920089722, 'acc': 0.71875, 'step': 744},\n",
              "  {'loss': 1.0403953790664673, 'acc': 0.59375, 'step': 745},\n",
              "  {'loss': 0.9337645173072815, 'acc': 0.625, 'step': 746},\n",
              "  {'loss': 0.9181017875671387, 'acc': 0.6875, 'step': 747},\n",
              "  {'loss': 0.8195827603340149, 'acc': 0.65625, 'step': 748},\n",
              "  {'loss': 0.8673887252807617, 'acc': 0.78125, 'step': 749},\n",
              "  {'loss': 0.6632922887802124, 'acc': 0.84375, 'step': 750},\n",
              "  {'loss': 0.9419635534286499, 'acc': 0.6875, 'step': 751},\n",
              "  {'loss': 0.947299599647522, 'acc': 0.65625, 'step': 752},\n",
              "  {'loss': 1.070648193359375, 'acc': 0.6875, 'step': 753},\n",
              "  {'loss': 0.9321110844612122, 'acc': 0.65625, 'step': 754},\n",
              "  {'loss': 0.7623831033706665, 'acc': 0.6875, 'step': 755},\n",
              "  {'loss': 0.9817699193954468, 'acc': 0.6875, 'step': 756},\n",
              "  {'loss': 0.915581226348877, 'acc': 0.5625, 'step': 757},\n",
              "  {'loss': 1.021253228187561, 'acc': 0.59375, 'step': 758},\n",
              "  {'loss': 0.9974936842918396, 'acc': 0.625, 'step': 759},\n",
              "  {'loss': 0.8716623783111572, 'acc': 0.75, 'step': 760},\n",
              "  {'loss': 0.9177215099334717, 'acc': 0.625, 'step': 761},\n",
              "  {'loss': 0.9638838171958923, 'acc': 0.71875, 'step': 762},\n",
              "  {'loss': 1.014885425567627, 'acc': 0.6875, 'step': 763},\n",
              "  {'loss': 0.7844623923301697, 'acc': 0.71875, 'step': 764},\n",
              "  {'loss': 0.7933996915817261, 'acc': 0.65625, 'step': 765},\n",
              "  {'loss': 0.925593912601471, 'acc': 0.59375, 'step': 766},\n",
              "  {'loss': 1.0091943740844727, 'acc': 0.59375, 'step': 767},\n",
              "  {'loss': 0.8465533256530762, 'acc': 0.6875, 'step': 768},\n",
              "  {'loss': 0.8888881802558899, 'acc': 0.78125, 'step': 769},\n",
              "  {'loss': 0.7845310568809509, 'acc': 0.6875, 'step': 770},\n",
              "  {'loss': 1.0816994905471802, 'acc': 0.5625, 'step': 771},\n",
              "  {'loss': 1.0077000856399536, 'acc': 0.59375, 'step': 772},\n",
              "  {'loss': 1.1708850860595703, 'acc': 0.59375, 'step': 773},\n",
              "  {'loss': 0.9238729476928711, 'acc': 0.6875, 'step': 774},\n",
              "  {'loss': 0.8040763735771179, 'acc': 0.75, 'step': 775},\n",
              "  {'loss': 0.9313432574272156, 'acc': 0.625, 'step': 776},\n",
              "  {'loss': 0.7747536897659302, 'acc': 0.78125, 'step': 777},\n",
              "  {'loss': 0.7643343806266785, 'acc': 0.625, 'step': 778},\n",
              "  {'loss': 0.9407819509506226, 'acc': 0.75, 'step': 779},\n",
              "  {'loss': 0.9323627948760986, 'acc': 0.6875, 'step': 780},\n",
              "  {'loss': 0.9193816781044006, 'acc': 0.625, 'step': 781},\n",
              "  {'loss': 0.9806419610977173, 'acc': 0.625, 'step': 782},\n",
              "  {'loss': 0.9353970289230347, 'acc': 0.65625, 'step': 783},\n",
              "  {'loss': 1.0932971239089966, 'acc': 0.625, 'step': 784},\n",
              "  {'loss': 0.9063534140586853, 'acc': 0.6875, 'step': 785},\n",
              "  {'loss': 1.167892336845398, 'acc': 0.5625, 'step': 786},\n",
              "  {'loss': 0.8058258295059204, 'acc': 0.6875, 'step': 787},\n",
              "  {'loss': 0.8186554312705994, 'acc': 0.78125, 'step': 788},\n",
              "  {'loss': 0.8977752923965454, 'acc': 0.78125, 'step': 789},\n",
              "  {'loss': 0.8284487724304199, 'acc': 0.78125, 'step': 790},\n",
              "  {'loss': 0.8569415807723999, 'acc': 0.6875, 'step': 791},\n",
              "  {'loss': 0.8676593899726868, 'acc': 0.71875, 'step': 792},\n",
              "  {'loss': 0.8095030784606934, 'acc': 0.8125, 'step': 793},\n",
              "  {'loss': 0.9598717093467712, 'acc': 0.71875, 'step': 794},\n",
              "  {'loss': 1.0098949670791626, 'acc': 0.6875, 'step': 795},\n",
              "  {'loss': 1.1016916036605835, 'acc': 0.59375, 'step': 796},\n",
              "  {'loss': 1.062865972518921, 'acc': 0.6875, 'step': 797},\n",
              "  {'loss': 0.8367726802825928, 'acc': 0.6875, 'step': 798},\n",
              "  {'loss': 0.8425483703613281, 'acc': 0.78125, 'step': 799},\n",
              "  {'loss': 0.9328831434249878, 'acc': 0.625, 'step': 800},\n",
              "  {'loss': 0.8692561984062195, 'acc': 0.71875, 'step': 801},\n",
              "  {'loss': 0.8957329988479614, 'acc': 0.75, 'step': 802},\n",
              "  {'loss': 0.9132624864578247, 'acc': 0.625, 'step': 803},\n",
              "  {'loss': 0.831787109375, 'acc': 0.65625, 'step': 804},\n",
              "  {'loss': 0.966237485408783, 'acc': 0.625, 'step': 805},\n",
              "  {'loss': 0.8446685671806335, 'acc': 0.625, 'step': 806},\n",
              "  {'loss': 0.9493698477745056, 'acc': 0.625, 'step': 807},\n",
              "  {'loss': 1.0331615209579468, 'acc': 0.59375, 'step': 808},\n",
              "  {'loss': 0.8412392735481262, 'acc': 0.71875, 'step': 809},\n",
              "  {'loss': 0.9251468777656555, 'acc': 0.625, 'step': 810},\n",
              "  {'loss': 1.0826572179794312, 'acc': 0.625, 'step': 811},\n",
              "  {'loss': 1.1353778839111328, 'acc': 0.59375, 'step': 812},\n",
              "  {'loss': 0.9134643077850342, 'acc': 0.65625, 'step': 813},\n",
              "  {'loss': 0.8942478895187378, 'acc': 0.5625, 'step': 814},\n",
              "  {'loss': 0.848360002040863, 'acc': 0.71875, 'step': 815},\n",
              "  {'loss': 0.7785698771476746, 'acc': 0.78125, 'step': 816},\n",
              "  {'loss': 1.0300418138504028, 'acc': 0.53125, 'step': 817},\n",
              "  {'loss': 0.9913471937179565, 'acc': 0.65625, 'step': 818},\n",
              "  {'loss': 1.1652441024780273, 'acc': 0.53125, 'step': 819},\n",
              "  {'loss': 0.8793664574623108, 'acc': 0.6875, 'step': 820},\n",
              "  {'loss': 0.9834601283073425, 'acc': 0.5625, 'step': 821},\n",
              "  {'loss': 0.8247785568237305, 'acc': 0.78125, 'step': 822},\n",
              "  {'loss': 0.7763502597808838, 'acc': 0.6875, 'step': 823},\n",
              "  {'loss': 0.7057846784591675, 'acc': 0.75, 'step': 824},\n",
              "  {'loss': 0.812202513217926, 'acc': 0.6875, 'step': 825},\n",
              "  {'loss': 0.9078802466392517, 'acc': 0.71875, 'step': 826},\n",
              "  {'loss': 0.9914355874061584, 'acc': 0.65625, 'step': 827},\n",
              "  {'loss': 0.7964178919792175, 'acc': 0.71875, 'step': 828},\n",
              "  {'loss': 0.6727097034454346, 'acc': 0.75, 'step': 829},\n",
              "  {'loss': 1.027315616607666, 'acc': 0.59375, 'step': 830},\n",
              "  {'loss': 1.0623881816864014, 'acc': 0.5625, 'step': 831},\n",
              "  {'loss': 0.8679233193397522, 'acc': 0.71875, 'step': 832},\n",
              "  {'loss': 0.8692196011543274, 'acc': 0.78125, 'step': 833},\n",
              "  {'loss': 0.9110607504844666, 'acc': 0.6875, 'step': 834},\n",
              "  {'loss': 0.9396665096282959, 'acc': 0.59375, 'step': 835},\n",
              "  {'loss': 1.038913369178772, 'acc': 0.71875, 'step': 836},\n",
              "  {'loss': 0.7695241570472717, 'acc': 0.6875, 'step': 837},\n",
              "  {'loss': 0.8754974603652954, 'acc': 0.5625, 'step': 838},\n",
              "  {'loss': 0.8664935827255249, 'acc': 0.65625, 'step': 839},\n",
              "  {'loss': 1.10609769821167, 'acc': 0.5, 'step': 840},\n",
              "  {'loss': 0.8405966758728027, 'acc': 0.6875, 'step': 841},\n",
              "  {'loss': 0.813255250453949, 'acc': 0.59375, 'step': 842},\n",
              "  {'loss': 0.7558194398880005, 'acc': 0.65625, 'step': 843},\n",
              "  {'loss': 0.7716155648231506, 'acc': 0.65625, 'step': 844},\n",
              "  {'loss': 0.6920187473297119, 'acc': 0.71875, 'step': 845},\n",
              "  {'loss': 0.706204891204834, 'acc': 0.75, 'step': 846},\n",
              "  {'loss': 0.7765705585479736, 'acc': 0.71875, 'step': 847},\n",
              "  {'loss': 0.7769532799720764, 'acc': 0.75, 'step': 848},\n",
              "  {'loss': 0.9090560674667358, 'acc': 0.5, 'step': 849},\n",
              "  {'loss': 0.9631618857383728, 'acc': 0.625, 'step': 850},\n",
              "  {'loss': 0.8961888551712036, 'acc': 0.6875, 'step': 851},\n",
              "  {'loss': 0.7316561341285706, 'acc': 0.71875, 'step': 852},\n",
              "  {'loss': 0.7242089509963989, 'acc': 0.78125, 'step': 853},\n",
              "  {'loss': 0.5311594605445862, 'acc': 0.84375, 'step': 854},\n",
              "  {'loss': 1.3315246105194092, 'acc': 0.46875, 'step': 855},\n",
              "  {'loss': 0.6840596795082092, 'acc': 0.78125, 'step': 856},\n",
              "  {'loss': 0.9652877449989319, 'acc': 0.78125, 'step': 857},\n",
              "  {'loss': 0.8509666323661804, 'acc': 0.6875, 'step': 858},\n",
              "  {'loss': 0.6606941223144531, 'acc': 0.875, 'step': 859},\n",
              "  {'loss': 0.5967684984207153, 'acc': 0.84375, 'step': 860},\n",
              "  {'loss': 1.001857876777649, 'acc': 0.71875, 'step': 861},\n",
              "  {'loss': 0.6863420605659485, 'acc': 0.84375, 'step': 862},\n",
              "  {'loss': 0.7997722625732422, 'acc': 0.65625, 'step': 863},\n",
              "  {'loss': 1.070337176322937, 'acc': 0.65625, 'step': 864},\n",
              "  {'loss': 0.776715874671936, 'acc': 0.78125, 'step': 865},\n",
              "  {'loss': 0.9094160795211792, 'acc': 0.625, 'step': 866},\n",
              "  {'loss': 0.8251975178718567, 'acc': 0.75, 'step': 867},\n",
              "  {'loss': 0.8725674152374268, 'acc': 0.6875, 'step': 868},\n",
              "  {'loss': 0.8967907428741455, 'acc': 0.78125, 'step': 869},\n",
              "  {'loss': 0.6968989372253418, 'acc': 0.78125, 'step': 870},\n",
              "  {'loss': 0.8038183450698853, 'acc': 0.78125, 'step': 871},\n",
              "  {'loss': 0.9501903057098389, 'acc': 0.6875, 'step': 872},\n",
              "  {'loss': 0.8691490888595581, 'acc': 0.625, 'step': 873},\n",
              "  {'loss': 1.0231201648712158, 'acc': 0.625, 'step': 874},\n",
              "  {'loss': 0.7037851810455322, 'acc': 0.75, 'step': 875},\n",
              "  {'loss': 0.8844600319862366, 'acc': 0.65625, 'step': 876},\n",
              "  {'loss': 0.9812614321708679, 'acc': 0.65625, 'step': 877},\n",
              "  {'loss': 0.7793412208557129, 'acc': 0.65625, 'step': 878},\n",
              "  {'loss': 1.0263882875442505, 'acc': 0.6875, 'step': 879},\n",
              "  {'loss': 0.8527272343635559, 'acc': 0.59375, 'step': 880},\n",
              "  {'loss': 0.8296995162963867, 'acc': 0.625, 'step': 881},\n",
              "  {'loss': 0.9512917995452881, 'acc': 0.65625, 'step': 882},\n",
              "  {'loss': 0.660691499710083, 'acc': 0.78125, 'step': 883},\n",
              "  {'loss': 1.0010679960250854, 'acc': 0.625, 'step': 884},\n",
              "  {'loss': 0.9638363122940063, 'acc': 0.65625, 'step': 885},\n",
              "  {'loss': 0.768278181552887, 'acc': 0.75, 'step': 886},\n",
              "  {'loss': 0.7780935168266296, 'acc': 0.71875, 'step': 887},\n",
              "  {'loss': 0.8801168203353882, 'acc': 0.625, 'step': 888},\n",
              "  {'loss': 0.885836124420166, 'acc': 0.6875, 'step': 889},\n",
              "  {'loss': 0.7167525887489319, 'acc': 0.75, 'step': 890},\n",
              "  {'loss': 0.8438424468040466, 'acc': 0.65625, 'step': 891},\n",
              "  {'loss': 0.8952602744102478, 'acc': 0.75, 'step': 892},\n",
              "  {'loss': 0.7955678701400757, 'acc': 0.6875, 'step': 893},\n",
              "  {'loss': 0.8900144696235657, 'acc': 0.65625, 'step': 894},\n",
              "  {'loss': 0.792899489402771, 'acc': 0.75, 'step': 895},\n",
              "  {'loss': 0.7232210040092468, 'acc': 0.84375, 'step': 896},\n",
              "  {'loss': 0.7441948056221008, 'acc': 0.78125, 'step': 897},\n",
              "  {'loss': 0.8536875247955322, 'acc': 0.625, 'step': 898},\n",
              "  {'loss': 1.1045929193496704, 'acc': 0.59375, 'step': 899},\n",
              "  {'loss': 1.0310850143432617, 'acc': 0.71875, 'step': 900},\n",
              "  {'loss': 0.7171875834465027, 'acc': 0.75, 'step': 901},\n",
              "  {'loss': 0.8618043661117554, 'acc': 0.75, 'step': 902},\n",
              "  {'loss': 0.6295897364616394, 'acc': 0.78125, 'step': 903},\n",
              "  {'loss': 0.9027191400527954, 'acc': 0.53125, 'step': 904},\n",
              "  {'loss': 0.7023661136627197, 'acc': 0.75, 'step': 905},\n",
              "  {'loss': 0.7043931484222412, 'acc': 0.75, 'step': 906},\n",
              "  {'loss': 0.8367157578468323, 'acc': 0.75, 'step': 907},\n",
              "  {'loss': 0.7733676433563232, 'acc': 0.75, 'step': 908},\n",
              "  {'loss': 0.8500474691390991, 'acc': 0.65625, 'step': 909},\n",
              "  {'loss': 0.999403715133667, 'acc': 0.625, 'step': 910},\n",
              "  {'loss': 0.7051510214805603, 'acc': 0.78125, 'step': 911},\n",
              "  {'loss': 1.2236528396606445, 'acc': 0.46875, 'step': 912},\n",
              "  {'loss': 0.736022412776947, 'acc': 0.6875, 'step': 913},\n",
              "  {'loss': 0.8820304870605469, 'acc': 0.65625, 'step': 914},\n",
              "  {'loss': 0.726245641708374, 'acc': 0.75, 'step': 915},\n",
              "  {'loss': 0.897879421710968, 'acc': 0.65625, 'step': 916},\n",
              "  {'loss': 0.8780081272125244, 'acc': 0.625, 'step': 917},\n",
              "  {'loss': 0.9599485993385315, 'acc': 0.65625, 'step': 918},\n",
              "  {'loss': 0.7800976037979126, 'acc': 0.65625, 'step': 919},\n",
              "  {'loss': 0.7090919613838196, 'acc': 0.8125, 'step': 920},\n",
              "  {'loss': 0.8909745216369629, 'acc': 0.65625, 'step': 921},\n",
              "  {'loss': 0.867071270942688, 'acc': 0.6875, 'step': 922},\n",
              "  {'loss': 0.799817681312561, 'acc': 0.6875, 'step': 923},\n",
              "  {'loss': 0.8138240575790405, 'acc': 0.71875, 'step': 924},\n",
              "  {'loss': 0.8571707606315613, 'acc': 0.65625, 'step': 925},\n",
              "  {'loss': 0.9003442525863647, 'acc': 0.6875, 'step': 926},\n",
              "  {'loss': 0.8371391296386719, 'acc': 0.625, 'step': 927},\n",
              "  {'loss': 0.7649402618408203, 'acc': 0.71875, 'step': 928},\n",
              "  {'loss': 0.9300422668457031, 'acc': 0.6875, 'step': 929},\n",
              "  {'loss': 0.9013205170631409, 'acc': 0.6875, 'step': 930},\n",
              "  {'loss': 0.7806675434112549, 'acc': 0.6875, 'step': 931},\n",
              "  {'loss': 0.886387288570404, 'acc': 0.625, 'step': 932},\n",
              "  {'loss': 0.7424149513244629, 'acc': 0.8125, 'step': 933},\n",
              "  {'loss': 1.002105474472046, 'acc': 0.65625, 'step': 934},\n",
              "  {'loss': 0.8614888787269592, 'acc': 0.625, 'step': 935},\n",
              "  {'loss': 0.7805671691894531, 'acc': 0.625, 'step': 936},\n",
              "  {'loss': 0.7476086020469666, 'acc': 0.78125, 'step': 937},\n",
              "  {'loss': 0.8140882849693298, 'acc': 0.71875, 'step': 938},\n",
              "  {'loss': 0.8174110651016235, 'acc': 0.6875, 'step': 939},\n",
              "  {'loss': 0.7886989712715149, 'acc': 0.78125, 'step': 940},\n",
              "  {'loss': 0.8288088440895081, 'acc': 0.71875, 'step': 941},\n",
              "  {'loss': 0.9348767995834351, 'acc': 0.65625, 'step': 942},\n",
              "  {'loss': 0.8502752780914307, 'acc': 0.625, 'step': 943},\n",
              "  {'loss': 0.7448456287384033, 'acc': 0.71875, 'step': 944},\n",
              "  {'loss': 0.722885012626648, 'acc': 0.71875, 'step': 945},\n",
              "  {'loss': 1.033545970916748, 'acc': 0.5, 'step': 946},\n",
              "  {'loss': 1.0805351734161377, 'acc': 0.4375, 'step': 947},\n",
              "  {'loss': 0.874670684337616, 'acc': 0.75, 'step': 948},\n",
              "  {'loss': 0.8485921025276184, 'acc': 0.6875, 'step': 949},\n",
              "  {'loss': 0.7392078638076782, 'acc': 0.78125, 'step': 950},\n",
              "  {'loss': 0.6951716542243958, 'acc': 0.78125, 'step': 951},\n",
              "  {'loss': 0.8956467509269714, 'acc': 0.6875, 'step': 952},\n",
              "  {'loss': 0.8763856887817383, 'acc': 0.59375, 'step': 953},\n",
              "  {'loss': 0.7847089171409607, 'acc': 0.65625, 'step': 954},\n",
              "  {'loss': 1.161726474761963, 'acc': 0.5625, 'step': 955},\n",
              "  {'loss': 0.928000271320343, 'acc': 0.78125, 'step': 956},\n",
              "  {'loss': 0.5739024877548218, 'acc': 0.84375, 'step': 957},\n",
              "  {'loss': 0.8822485208511353, 'acc': 0.71875, 'step': 958},\n",
              "  {'loss': 0.9302253127098083, 'acc': 0.59375, 'step': 959},\n",
              "  {'loss': 0.6817671656608582, 'acc': 0.8125, 'step': 960},\n",
              "  {'loss': 0.9823952317237854, 'acc': 0.625, 'step': 961},\n",
              "  {'loss': 0.9979225993156433, 'acc': 0.65625, 'step': 962},\n",
              "  {'loss': 0.8483955264091492, 'acc': 0.65625, 'step': 963},\n",
              "  {'loss': 0.9063029289245605, 'acc': 0.59375, 'step': 964},\n",
              "  {'loss': 0.8294313549995422, 'acc': 0.5625, 'step': 965},\n",
              "  {'loss': 0.8652808666229248, 'acc': 0.71875, 'step': 966},\n",
              "  {'loss': 0.7190725207328796, 'acc': 0.71875, 'step': 967},\n",
              "  {'loss': 0.862753689289093, 'acc': 0.59375, 'step': 968},\n",
              "  {'loss': 0.6451682448387146, 'acc': 0.75, 'step': 969},\n",
              "  {'loss': 0.5718293190002441, 'acc': 0.90625, 'step': 970},\n",
              "  {'loss': 0.9905369877815247, 'acc': 0.6875, 'step': 971},\n",
              "  {'loss': 0.7619384527206421, 'acc': 0.6875, 'step': 972},\n",
              "  {'loss': 0.8948690891265869, 'acc': 0.59375, 'step': 973},\n",
              "  {'loss': 0.8350218534469604, 'acc': 0.6875, 'step': 974},\n",
              "  {'loss': 0.9001948237419128, 'acc': 0.65625, 'step': 975},\n",
              "  {'loss': 0.7885254621505737, 'acc': 0.65625, 'step': 976},\n",
              "  {'loss': 0.7039259076118469, 'acc': 0.71875, 'step': 977},\n",
              "  {'loss': 0.8434478044509888, 'acc': 0.71875, 'step': 978},\n",
              "  {'loss': 0.8373648524284363, 'acc': 0.8125, 'step': 979},\n",
              "  {'loss': 0.46549221873283386, 'acc': 0.84375, 'step': 980},\n",
              "  {'loss': 0.7686549425125122, 'acc': 0.625, 'step': 981},\n",
              "  {'loss': 0.964119553565979, 'acc': 0.625, 'step': 982},\n",
              "  {'loss': 0.6325885653495789, 'acc': 0.84375, 'step': 983},\n",
              "  {'loss': 1.2476603984832764, 'acc': 0.65625, 'step': 984},\n",
              "  {'loss': 0.8738147616386414, 'acc': 0.6875, 'step': 985},\n",
              "  {'loss': 0.9790080785751343, 'acc': 0.53125, 'step': 986},\n",
              "  {'loss': 0.9723992943763733, 'acc': 0.59375, 'step': 987},\n",
              "  {'loss': 0.7456041574478149, 'acc': 0.78125, 'step': 988},\n",
              "  {'loss': 0.9619930386543274, 'acc': 0.6875, 'step': 989},\n",
              "  {'loss': 0.8643002510070801, 'acc': 0.71875, 'step': 990},\n",
              "  {'loss': 0.6881030201911926, 'acc': 0.78125, 'step': 991},\n",
              "  {'loss': 1.1046786308288574, 'acc': 0.65625, 'step': 992},\n",
              "  {'loss': 1.0305516719818115, 'acc': 0.71875, 'step': 993},\n",
              "  {'loss': 0.6315712928771973, 'acc': 0.78125, 'step': 994},\n",
              "  {'loss': 0.6971991658210754, 'acc': 0.71875, 'step': 995},\n",
              "  {'loss': 0.6901538968086243, 'acc': 0.78125, 'step': 996},\n",
              "  {'loss': 0.752780556678772, 'acc': 0.6875, 'step': 997},\n",
              "  {'loss': 0.9893448352813721, 'acc': 0.625, 'step': 998},\n",
              "  {'loss': 0.9165850877761841, 'acc': 0.65625, 'step': 999},\n",
              "  ...],\n",
              " 'val': [{'loss': 2.3072766815892423, 'acc': 0.1333, 'step': 0},\n",
              "  {'loss': 0.8308717545609885, 'acc': 0.6901, 'step': 1000},\n",
              "  {'loss': 0.6553989537417317, 'acc': 0.764, 'step': 2000},\n",
              "  {'loss': 0.5867300343494446, 'acc': 0.7912, 'step': 3000},\n",
              "  {'loss': 0.5365936040116576, 'acc': 0.8148, 'step': 4000},\n",
              "  {'loss': 0.5188520979671813, 'acc': 0.8154, 'step': 5000},\n",
              "  {'loss': 0.488368803177017, 'acc': 0.8266, 'step': 6000},\n",
              "  {'loss': 0.4771509967482509, 'acc': 0.8305, 'step': 7000},\n",
              "  {'loss': 0.46826269432378653, 'acc': 0.8347, 'step': 8000},\n",
              "  {'loss': 0.45620823139771105, 'acc': 0.8395, 'step': 9000},\n",
              "  {'loss': 0.45053437561653675, 'acc': 0.8396, 'step': 10000},\n",
              "  {'loss': 0.44242686099899464, 'acc': 0.8413, 'step': 11000},\n",
              "  {'loss': 0.43621242965181795, 'acc': 0.8444, 'step': 12000},\n",
              "  {'loss': 0.4295381627286585, 'acc': 0.8487, 'step': 13000},\n",
              "  {'loss': 0.43031189764460054, 'acc': 0.8484, 'step': 14000},\n",
              "  {'loss': 0.4119808449151036, 'acc': 0.8531, 'step': 15000},\n",
              "  {'loss': 0.4100405538615327, 'acc': 0.855, 'step': 16000},\n",
              "  {'loss': 0.41417595051443234, 'acc': 0.8541, 'step': 17000},\n",
              "  {'loss': 0.4047119495586846, 'acc': 0.8549, 'step': 18000},\n",
              "  {'loss': 0.39738622783852845, 'acc': 0.8572, 'step': 19000},\n",
              "  {'loss': 0.42345598782784644, 'acc': 0.8482, 'step': 20000},\n",
              "  {'loss': 0.387865989495771, 'acc': 0.8613, 'step': 21000},\n",
              "  {'loss': 0.39063141030815846, 'acc': 0.8579, 'step': 22000},\n",
              "  {'loss': 0.4158722275552658, 'acc': 0.8502, 'step': 23000},\n",
              "  {'loss': 0.3846115906017657, 'acc': 0.8628, 'step': 24000},\n",
              "  {'loss': 0.3814440551704873, 'acc': 0.8639, 'step': 25000},\n",
              "  {'loss': 0.3888058046134897, 'acc': 0.8566, 'step': 26000},\n",
              "  {'loss': 0.3810410542657581, 'acc': 0.8609, 'step': 27000},\n",
              "  {'loss': 0.3869907579863795, 'acc': 0.8602, 'step': 28000},\n",
              "  {'loss': 0.36830313115740737, 'acc': 0.8687, 'step': 29000},\n",
              "  {'loss': 0.3679448443289382, 'acc': 0.8703, 'step': 30000},\n",
              "  {'loss': 0.37445235047667935, 'acc': 0.867, 'step': 31000},\n",
              "  {'loss': 0.3639328739465997, 'acc': 0.8693, 'step': 32000},\n",
              "  {'loss': 0.35808960007973756, 'acc': 0.8692, 'step': 33000},\n",
              "  {'loss': 0.3543784108976967, 'acc': 0.8724, 'step': 34000},\n",
              "  {'loss': 0.3573774755738985, 'acc': 0.8713, 'step': 35000}]}"
            ]
          },
          "metadata": {},
          "execution_count": 18
        }
      ],
      "execution_count": 18
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T03:11:57.098349Z",
          "start_time": "2025-01-16T03:11:57.010768Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 708
        },
        "id": "OakYWmwluwyP",
        "outputId": "ae69df70-b85e-4228-db84-b09f3e94a585"
      },
      "source": [
        "#画线要注意的是损失是不一定在零到1之间的\n",
        "def plot_learning_curves(record_dict, sample_step=500):\n",
        "    # build DataFrame\n",
        "    train_df = pd.DataFrame(record_dict[\"train\"]).set_index(\"step\").iloc[::sample_step]\n",
        "    val_df = pd.DataFrame(record_dict[\"val\"]).set_index(\"step\")\n",
        "    print(train_df.head())\n",
        "    print(val_df.head())\n",
        "    # plot\n",
        "    fig_num = len(train_df.columns) #因为有loss和acc两个指标，所以画个子图\n",
        "    fig, axs = plt.subplots(1, fig_num, figsize=(5 * fig_num, 5)) #fig_num个子图，figsize是子图大小\n",
        "    for idx, item in enumerate(train_df.columns):\n",
        "        #index是步数，item是指标名字\n",
        "        axs[idx].plot(train_df.index, train_df[item], label=f\"train_{item}\")\n",
        "        axs[idx].plot(val_df.index, val_df[item], label=f\"val_{item}\")\n",
        "        axs[idx].grid()\n",
        "        axs[idx].legend()\n",
        "        x_data=range(0, train_df.index[-1], 5000) #每隔5000步标出一个点\n",
        "        axs[idx].set_xticks(x_data)\n",
        "        axs[idx].set_xticklabels(map(lambda x: f\"{int(x/1000)}k\", x_data)) #map生成labal\n",
        "        axs[idx].set_xlabel(\"step\")\n",
        "\n",
        "    plt.show()\n",
        "\n",
        "plot_learning_curves(record, sample_step=500)  #横坐标是 steps"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "          loss      acc\n",
            "step                   \n",
            "0     2.303921  0.15625\n",
            "500   1.237095  0.65625\n",
            "1000  0.872444  0.68750\n",
            "1500  0.472143  0.78125\n",
            "2000  0.459890  0.90625\n",
            "          loss     acc\n",
            "step                  \n",
            "0     2.307277  0.1333\n",
            "1000  0.830872  0.6901\n",
            "2000  0.655399  0.7640\n",
            "3000  0.586730  0.7912\n",
            "4000  0.536594  0.8148\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x500 with 2 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ],
      "execution_count": 19
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5fcXBee4uwyP"
      },
      "source": [
        "# 评估"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "model = NeuralNetwork() #上线时加载模型\n",
        "model = model.to(device)"
      ],
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T03:13:55.432497Z",
          "start_time": "2025-01-16T03:13:55.428482Z"
        },
        "id": "kjwgWuO-uwyQ"
      },
      "outputs": [],
      "execution_count": 20
    },
    {
      "cell_type": "code",
      "metadata": {
        "ExecuteTime": {
          "end_time": "2025-01-16T03:18:55.049970Z",
          "start_time": "2025-01-16T03:18:54.524867Z"
        },
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Ql79qWJyuwyQ",
        "outputId": "e3b548af-edf7-471a-cad2-965e53271767"
      },
      "source": [
        "# dataload for evaluating\n",
        "#模型保存有两种情况，一种是模型结构和模型参数都保存，一种是只保存模型参数，这里是只保存模型参数，所以需要加上weights_only=True\n",
        "# load checkpoints\n",
        "model.load_state_dict(torch.load(\"checkpoints/best.ckpt\", weights_only=True,map_location=\"cpu\"))\n",
        "\n",
        "model.eval()\n",
        "loss, acc = evaluating(model, val_loader, loss_fct)\n",
        "print(f\"loss:     {loss:.4f}\\naccuracy: {acc:.4f}\")"
      ],
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "loss:     0.3544\n",
            "accuracy: 0.8724\n"
          ]
        }
      ],
      "execution_count": 21
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.10.8"
    },
    "orig_nbformat": 4,
    "colab": {
      "provenance": [],
      "gpuType": "T4"
    },
    "accelerator": "GPU",
    "widgets": {
      "application/vnd.jupyter.widget-state+json": {
        "95ecd06930ae477ba122a3eb87565921": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HBoxModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HBoxModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HBoxView",
            "box_style": "",
            "children": [
              "IPY_MODEL_54fe4237c0ef4770a7e5692a06563f25",
              "IPY_MODEL_5d9fcf62b612471eac9c11f24122ae35",
              "IPY_MODEL_11488c89172c4b918f48fd4f07c63098"
            ],
            "layout": "IPY_MODEL_bf31bb19ab174f2e8db63260d8b3b7e4"
          }
        },
        "54fe4237c0ef4770a7e5692a06563f25": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_f9695da9476d48b6a58432fd638ea791",
            "placeholder": "​",
            "style": "IPY_MODEL_c43dfbfb958043af8f69e3018d3bd577",
            "value": " 19%"
          }
        },
        "5d9fcf62b612471eac9c11f24122ae35": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "FloatProgressModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "FloatProgressModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "ProgressView",
            "bar_style": "danger",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_e80b45fc2c3d4ba48c05c1febe2f6f29",
            "max": 187500,
            "min": 0,
            "orientation": "horizontal",
            "style": "IPY_MODEL_95d8fe7cb19240be88aa8a27a5691fd6",
            "value": 35000
          }
        },
        "11488c89172c4b918f48fd4f07c63098": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "HTMLModel",
          "model_module_version": "1.5.0",
          "state": {
            "_dom_classes": [],
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "HTMLModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/controls",
            "_view_module_version": "1.5.0",
            "_view_name": "HTMLView",
            "description": "",
            "description_tooltip": null,
            "layout": "IPY_MODEL_d75f329c3121432b8b7b77d26d47cc86",
            "placeholder": "​",
            "style": "IPY_MODEL_13595f3798334166bf028eb8e599ba35",
            "value": " 35000/187500 [06:42&lt;31:00, 81.98it/s, epoch=18]"
          }
        },
        "bf31bb19ab174f2e8db63260d8b3b7e4": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "f9695da9476d48b6a58432fd638ea791": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "c43dfbfb958043af8f69e3018d3bd577": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        },
        "e80b45fc2c3d4ba48c05c1febe2f6f29": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "95d8fe7cb19240be88aa8a27a5691fd6": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "ProgressStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "ProgressStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "bar_color": null,
            "description_width": ""
          }
        },
        "d75f329c3121432b8b7b77d26d47cc86": {
          "model_module": "@jupyter-widgets/base",
          "model_name": "LayoutModel",
          "model_module_version": "1.2.0",
          "state": {
            "_model_module": "@jupyter-widgets/base",
            "_model_module_version": "1.2.0",
            "_model_name": "LayoutModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "LayoutView",
            "align_content": null,
            "align_items": null,
            "align_self": null,
            "border": null,
            "bottom": null,
            "display": null,
            "flex": null,
            "flex_flow": null,
            "grid_area": null,
            "grid_auto_columns": null,
            "grid_auto_flow": null,
            "grid_auto_rows": null,
            "grid_column": null,
            "grid_gap": null,
            "grid_row": null,
            "grid_template_areas": null,
            "grid_template_columns": null,
            "grid_template_rows": null,
            "height": null,
            "justify_content": null,
            "justify_items": null,
            "left": null,
            "margin": null,
            "max_height": null,
            "max_width": null,
            "min_height": null,
            "min_width": null,
            "object_fit": null,
            "object_position": null,
            "order": null,
            "overflow": null,
            "overflow_x": null,
            "overflow_y": null,
            "padding": null,
            "right": null,
            "top": null,
            "visibility": null,
            "width": null
          }
        },
        "13595f3798334166bf028eb8e599ba35": {
          "model_module": "@jupyter-widgets/controls",
          "model_name": "DescriptionStyleModel",
          "model_module_version": "1.5.0",
          "state": {
            "_model_module": "@jupyter-widgets/controls",
            "_model_module_version": "1.5.0",
            "_model_name": "DescriptionStyleModel",
            "_view_count": null,
            "_view_module": "@jupyter-widgets/base",
            "_view_module_version": "1.2.0",
            "_view_name": "StyleView",
            "description_width": ""
          }
        }
      }
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}